import type { ReactNode } from "react";

export type TemplateProps<KcContext, I18n> = {
    kcContext: KcContext;
    i18n: I18n;
    doUseDefaultCss: boolean;
    classes?: Partial<Record<ClassKey, string>>;
    children: ReactNode;

    displayInfo?: boolean;
    displayMessage?: boolean;
    displayRequiredFields?: boolean;
    showAnotherWayIfPresent?: boolean;
    headerNode: ReactNode;
    socialProvidersNode?: ReactNode;
    infoNode?: ReactNode;
    documentTitle?: string;
    bodyClassName?: string;
};

export type ClassKey =
    | "kcBodyClass"
    | "kcHeaderWrapperClass"
    | "kcLocaleWrapperClass"
    | "kcInfoAreaWrapperClass"
    | "kcFormButtonsWrapperClass"
    | "kcFormOptionsWrapperClass"
    | "kcCheckboxInputClass"
    | "kcLocaleDropDownClass"
    | "kcLocaleListItemClass"
    | "kcContentWrapperClass"
    | "kcLogoIdP-facebook"
    | "kcAuthenticatorOTPClass"
    | "kcLogoIdP-bitbucket"
    | "kcAuthenticatorWebAuthnClass"
    | "kcWebAuthnDefaultIcon"
    | "kcLogoIdP-stackoverflow"
    | "kcSelectAuthListItemClass"
    | "kcLogoIdP-microsoft"
    | "kcLoginOTPListItemHeaderClass"
    | "kcLocaleItemClass"
    | "kcLoginOTPListItemIconBodyClass"
    | "kcInputHelperTextAfterClass"
    | "kcFormClass"
    | "kcSelectAuthListClass"
    | "kcInputClassRadioCheckboxLabelDisabled"
    | "kcSelectAuthListItemIconClass"
    | "kcRecoveryCodesWarning"
    | "kcFormSettingClass"
    | "kcWebAuthnBLE"
    | "kcInputWrapperClass"
    | "kcSelectAuthListItemArrowIconClass"
    | "kcFeedbackAreaClass"
    | "kcFormPasswordVisibilityButtonClass"
    | "kcLogoIdP-google"
    | "kcCheckLabelClass"
    | "kcSelectAuthListItemFillClass"
    | "kcAuthenticatorDefaultClass"
    | "kcLogoIdP-gitlab"
    | "kcFormAreaClass"
    | "kcFormButtonsClass"
    | "kcInputClassRadioLabel"
    | "kcAuthenticatorWebAuthnPasswordlessClass"
    | "kcSelectAuthListItemHeadingClass"
    | "kcInfoAreaClass"
    | "kcLogoLink"
    | "kcContainerClass"
    | "kcSelectAuthListItemTitle"
    | "kcHtmlClass"
    | "kcLoginOTPListItemTitleClass"
    | "kcLogoIdP-openshift-v4"
    | "kcWebAuthnUnknownIcon"
    | "kcFormSocialAccountNameClass"
    | "kcLogoIdP-openshift-v3"
    | "kcLoginOTPListInputClass"
    | "kcWebAuthnUSB"
    | "kcInputClassRadio"
    | "kcWebAuthnKeyIcon"
    | "kcFeedbackInfoIcon"
    | "kcCommonLogoIdP"
    | "kcRecoveryCodesActions"
    | "kcFormGroupHeader"
    | "kcFormSocialAccountSectionClass"
    | "kcLogoIdP-instagram"
    | "kcAlertClass"
    | "kcHeaderClass"
    | "kcLabelWrapperClass"
    | "kcFormPasswordVisibilityIconShow"
    | "kcFormSocialAccountLinkClass"
    | "kcLocaleMainClass"
    | "kcInputGroup"
    | "kcTextareaClass"
    | "kcButtonBlockClass"
    | "kcButtonClass"
    | "kcWebAuthnNFC"
    | "kcLocaleClass"
    | "kcInputClassCheckboxInput"
    | "kcFeedbackErrorIcon"
    | "kcInputLargeClass"
    | "kcInputErrorMessageClass"
    | "kcRecoveryCodesList"
    | "kcFormSocialAccountListClass"
    | "kcAlertTitleClass"
    | "kcAuthenticatorPasswordClass"
    | "kcCheckInputClass"
    | "kcLogoIdP-linkedin"
    | "kcLogoIdP-twitter"
    | "kcFeedbackWarningIcon"
    | "kcResetFlowIcon"
    | "kcSelectAuthListItemIconPropertyClass"
    | "kcFeedbackSuccessIcon"
    | "kcLoginOTPListClass"
    | "kcSrOnlyClass"
    | "kcFormSocialAccountListGridClass"
    | "kcButtonDefaultClass"
    | "kcFormGroupErrorClass"
    | "kcSelectAuthListItemDescriptionClass"
    | "kcSelectAuthListItemBodyClass"
    | "kcWebAuthnInternal"
    | "kcSelectAuthListItemArrowClass"
    | "kcCheckClass"
    | "kcContentClass"
    | "kcLogoClass"
    | "kcLoginOTPListItemIconClass"
    | "kcLoginClass"
    | "kcSignUpClass"
    | "kcButtonLargeClass"
    | "kcFormCardClass"
    | "kcLocaleListClass"
    | "kcInputClass"
    | "kcFormGroupClass"
    | "kcLogoIdP-paypal"
    | "kcInputClassCheckbox"
    | "kcRecoveryCodesConfirmation"
    | "kcFormPasswordVisibilityIconHide"
    | "kcInputClassRadioInput"
    | "kcFormSocialAccountListButtonClass"
    | "kcInputClassCheckboxLabel"
    | "kcFormOptionsClass"
    | "kcFormHeaderClass"
    | "kcFormSocialAccountGridItem"
    | "kcButtonPrimaryClass"
    | "kcInputHelperTextBeforeClass"
    | "kcLogoIdP-github"
    | "kcLabelClass";
