import { ACMVendor, IdAndName, TCFData, TCFUserDecisions } from '../interfaces/TCF';
import { Consent, DataDistribution, Language, ProcessingCompany, ResurfaceOptions, TCFChangedPurposes, URLs } from '../interfaces';
import { DeviceStorage, LegacyTCF2 } from '../../Api/interfaces';
import { LEGACY_CCPA_REGION } from '../../Api/enums';
import { STRING_CHARACTER } from '../enums/Ccpa/enums';
import { Service } from '../interfaces/interfaces';
import { TCF_DECISION_UI_LAYER } from '../enums/TCF';
export type TcfPolicyVersion = 2 | 4 | 5;
export interface ExtendedServiceData {
    cookieMaxAgeSeconds: number | null;
    cookieRefresh: boolean | null;
    dataCollected: string[];
    dataDistribution: DataDistribution | null;
    dataProtectionOfficer: string | null;
    dataPurposes: string[];
    dataRecipients: string[];
    description: string;
    deviceStorage: DeviceStorage | null;
    deviceStorageDisclosureUrl: string | null;
    language: Language | null;
    processingCompany: ProcessingCompany | null;
    retentionPeriodDescription: string | null;
    technologiesUsed: string[];
    urls: URLs | null;
    usesCookies: boolean | null;
    usesNonCookieAccess: boolean | null;
}
export interface BaseServiceData {
    categorySlug: string;
    consent: Consent;
    fetchSubServices: () => Promise<Service[]>;
    id: string;
    isEssential: boolean;
    isHidden: boolean;
    processorId: string;
    subServices: ServiceData[];
    subServicesLength: number;
    usesThirdCountry: boolean;
    version: string;
}
export type ServiceData = BaseServiceData & ExtendedServiceData;
export type ServiceBasic = Pick<Service, 'consent' | 'id' | 'name' | 'processorId' | 'language' | 'version' | 'categorySlug'>;
export interface BaseCategoryData {
    isEssential: boolean;
    isHidden: boolean;
    services: BaseServiceData[];
    slug: string;
}
export interface CategoryData {
    isEssential: boolean;
    isHidden: boolean;
    services: ServiceData[];
    slug: string;
}
export interface DefaultData {
    categories: CategoryData[];
    controllerId: string;
}
export interface CcpaData extends DefaultData {
    explicitDeny: boolean;
    iabAgreementExists: boolean;
    isActive: boolean;
    isExplicitConsented: boolean;
    isOptedOut?: boolean;
    region: LEGACY_CCPA_REGION;
    reshowAfterDays: number;
    showOnPageLoad: boolean;
    legalFramework: LegalFramework;
    getIsOptedOut: () => boolean;
    getExplicitNotice: () => boolean;
    setCcpaStorage: (isOptedOut: boolean, isNoticeGiven?: STRING_CHARACTER) => void;
    setIsOptedOut: (optedOut: boolean | string) => void;
}
export interface TcfData extends DefaultData {
    acmData: AcmData;
    acceptAllDisclosed: (fromLayer: TCF_DECISION_UI_LAYER) => Promise<void>;
    areAllPurposesAccepted: () => boolean;
    areAllVendorsAccepted: () => boolean;
    changedPurposes: TCFChangedPurposes;
    changeLanguage: (language: string, tcfSettings?: LegacyTCF2) => Promise<void>;
    cmpId: number;
    cmpVersion: number;
    consensuScriptPath: string;
    consensuSubdomain: string;
    denyAllDisclosed: (fromLayer: TCF_DECISION_UI_LAYER) => Promise<void>;
    disabledSpecialFeatures: number[];
    gdprApplies: boolean;
    getGdprApplies: () => Promise<boolean>;
    getSelectedVendorsIncludeNonDisclosed: () => boolean;
    getTCFData: () => TCFData;
    getTCString: () => string;
    getTCFDisclosedVendorsSegmentString: () => string;
    getVendorsCount: () => number;
    hideLegitimateInterestToggles: boolean;
    init: (isEuMode: boolean) => Promise<void>;
    injectTCString: (tcString: string) => Promise<boolean>;
    publisherCountryCode: string;
    purposeOneTreatment: boolean;
    resetTcf: () => void;
    resurfaceOptions: ResurfaceOptions;
    setUIAsClosed: () => Promise<void>;
    setUIAsOpen: () => Promise<void>;
    shouldResurfaceUI: () => boolean;
    stackIds: number[];
    tcfv2HistoryDisabled: boolean;
    updateChoices: (decisions: TCFUserDecisions, fromLayer: TCF_DECISION_UI_LAYER) => Promise<void>;
    updateControllerId: (value: string) => void;
    useGranularChoice: boolean;
    vendorIds: number[];
    vendorIdsOutsideEUList: number[];
}
export type Data = DefaultData | CcpaData | TcfData;
export interface AcmData {
    isEnabled: boolean;
    vendorIds: number[];
    vendors?: ACMVendor[];
    vendorsPurposes: IdAndName[];
}
export interface GppDataInterface {
    setCmpSignalReady: () => Promise<void>;
    setCmpStatusLoaded: () => Promise<void>;
    setCmpDisplayHidden: () => Promise<void>;
    setCmpDisplayVisible: () => Promise<void>;
}
export type LegalFramework = 'tcfeuv2' | 'tcfcav1' | 'uspv1' | 'usnat' | 'usca' | 'usva' | 'usco' | 'usut' | 'usct';
