import type { ComponentChildren } from 'preact';
import type { CountryCode } from '../../core/models/country-code';
/**
 * Settings are features that can be switched on or off by external users.
 * This list is defined in the BE.
 */
export declare enum SettingNames {
    AcceptedCountries = "acceptedCountries",
    AllowBankAccountFormatSelection = "allowBankAccountFormatSelection",
    AllowDebugUi = "allowDebugUi",
    AllowIntraRegionCrossBorderPayout = "allowIntraRegionCrossBorderPayout",
    AllowLegalEntityTypeChange = "changeLegalEntityType",
    AllowPrefilledCountryEdit = "editPrefilledCountry",
    RequirePciSignEcommerce = "requirePciSignEcommerce",
    RequirePciSignPos = "requirePciSignPos",
    RequirePciSignEcomMoto = "requirePciSignEcomMoto",
    RequirePciSignPosMoto = "requirePciSignPosMoto",
    HideOnboardingIntroductionIndividual = "hideOnboardingIntroductionIndividual",
    HideOnboardingIntroductionOrganization = "hideOnboardingIntroductionOrganization",
    HideOnboardingIntroductionTrust = "hideOnboardingIntroductionTrust",
    HideOnboardingIntroductionSoleProprietor = "hideOnboardingIntroductionSoleProprietor",
    TransferInstrumentLimit = "transferInstrumentLimit",
    ViewOnboardingGuidance = "viewOnboardingGuidance",
    InstantBankVerification = "instantBankVerification",
    ShowServiceAgreementsFirst = "showServiceAgreementsFirst",
    ShowBusinessFinancingFirst = "showBusinessFinancingFirst",
    EnforceLegalAge = "enforceLegalAge"
}
export type SettingName = `${SettingNames}`;
export interface Settings {
    acceptedCountries: CountryCode[] | undefined;
    allowBankAccountFormatSelection: boolean;
    allowDebugUi: boolean;
    allowIntraRegionCrossBorderPayout: boolean;
    changeLegalEntityType: boolean;
    editPrefilledCountry: boolean;
    requirePciSignEcommerce: boolean;
    requirePciSignPos: boolean;
    requirePciSignEcomMoto: boolean;
    requirePciSignPosMoto: boolean;
    hideOnboardingIntroductionIndividual: boolean;
    hideOnboardingIntroductionOrganization: boolean;
    hideOnboardingIntroductionTrust: boolean;
    hideOnboardingIntroductionSoleProprietor: boolean;
    viewOnboardingGuidance: boolean;
    transferInstrumentLimit: number;
    instantBankVerification: boolean;
    showServiceAgreementsFirst: boolean;
    showBusinessFinancingFirst: boolean;
    enforceLegalAge: boolean;
}
export type ProvidedSettings = Partial<Settings>;
export type BooleanSettingName = {
    [S in keyof Settings]: Settings[S] extends boolean ? S : never;
}[keyof Settings];
export interface SettingsProps {
    children?: ComponentChildren;
    settings: ProvidedSettings;
}
export interface SettingsContextValue {
    isSettingEnabled(key: BooleanSettingName): boolean;
    getSetting<S extends SettingName>(settingName: S): Settings[S];
}
