import { EntitlementGrantType, EntitlementSource, ExperimentGroupType, IntroEligibilityStatus, OfferingTag, PricingPhaseRecurrenceMode, PricingPhaseType, ProductType, QonversionErrorCode, RemoteConfigurationAssignmentType, RemoteConfigurationSourceType, SKPeriodUnit, SKProductDiscountPaymentMode, SKProductDiscountType, SubscriptionPeriodUnit, TransactionEnvironment, TransactionOwnershipType, TransactionType, UserPropertyKey } from "../dto/enums";
import { IntroEligibility } from "../dto/IntroEligibility";
import { Offering } from "../dto/Offering";
import { Offerings } from "../dto/Offerings";
import { Entitlement } from "../dto/Entitlement";
import { Product } from "../dto/Product";
import { SKProduct } from "../dto/storeProducts/SKProduct";
import { SKProductDiscount } from "../dto/storeProducts/SKProductDiscount";
import { SKSubscriptionPeriod } from "../dto/storeProducts/SKSubscriptionPeriod";
import { SkuDetails } from "../dto/storeProducts/SkuDetails";
import { ActionResult } from "../dto/ActionResult";
import { QonversionError } from "../dto/QonversionError";
import { User } from '../dto/User';
import { SubscriptionPeriod } from "../dto/SubscriptionPeriod";
import { RemoteConfig } from "../dto/RemoteConfig";
import { RemoteConfigList } from '../dto/RemoteConfigList';
import { UserProperties } from '../dto/UserProperties';
import { Transaction } from "../dto/Transaction";
import { ProductStoreDetails } from "../dto/storeProducts/ProductStoreDetails";
import { ProductOfferDetails } from "../dto/storeProducts/ProductOfferDetails";
import { ProductInAppDetails } from "../dto/storeProducts/ProductInAppDetails";
import { ProductPrice } from "../dto/storeProducts/ProductPrice";
import { ProductPricingPhase } from "../dto/storeProducts/ProductPricingPhase";
import { ProductInstallmentPlanDetails } from '../dto/storeProducts/ProductInstallmentPlanDetails';
import { PromotionalOffer } from '../dto/PromotionalOffer';
import { SKPaymentDiscount } from '../dto/storeProducts/SKPaymentDiscount';
export declare type QProduct = {
    id: string;
    storeId: string;
    basePlanId?: string | null;
    type: string;
    subscriptionPeriod?: QSubscriptionPeriod | null;
    trialPeriod?: QSubscriptionPeriod | null;
    skuDetails?: QSkuDetails | null;
    storeDetails?: QProductStoreDetails;
    skProduct?: QSKProduct | null;
    prettyPrice?: string | null;
    offeringId?: string | null;
};
declare type QProductStoreDetails = {
    basePlanId?: string | null;
    productId: string;
    name: string;
    title: string;
    description: string;
    subscriptionOfferDetails?: QProductOfferDetails[] | null;
    defaultSubscriptionOfferDetails?: QProductOfferDetails | null;
    basePlanSubscriptionOfferDetails?: QProductOfferDetails | null;
    inAppOfferDetails?: QProductInAppDetails | null;
    hasTrialOffer: boolean;
    hasIntroOffer: boolean;
    hasTrialOrIntroOffer: boolean;
    productType: string;
    isInApp: boolean;
    isSubscription: boolean;
    isPrepaid: boolean;
    isInstallment: boolean;
};
declare type QSubscriptionPeriod = {
    unitCount: number;
    unit: string;
    iso: string;
};
declare type QProductPricingPhase = {
    price: QProductPrice;
    billingPeriod: QSubscriptionPeriod;
    billingCycleCount: number;
    recurrenceMode: string;
    type: string;
    isTrial: boolean;
    isIntro: boolean;
    isBasePlan: boolean;
};
declare type QProductInstallmentPlanDetails = {
    commitmentPaymentsCount: number;
    subsequentCommitmentPaymentsCount: number;
};
export declare type QPromotionalOffer = {
    productDiscount: QProductDiscount;
    paymentDiscount: QPaymentDiscount;
};
declare type QProductOfferDetails = {
    basePlanId: string;
    offerId?: string | null;
    offerToken: string;
    tags: string[];
    pricingPhases: QProductPricingPhase[];
    basePlan?: QProductPricingPhase | null;
    installmentPlanDetails?: QProductInstallmentPlanDetails | null;
    trialPhase?: QProductPricingPhase | null;
    introPhase: QProductPricingPhase | null;
    hasTrial: boolean;
    hasIntro: boolean;
    hasTrialOrIntro: boolean;
};
declare type QProductPrice = {
    priceAmountMicros: number;
    priceCurrencyCode: string;
    formattedPrice: string;
    isFree: boolean;
    currencySymbol: string;
};
declare type QProductInAppDetails = {
    price: QProductPrice;
};
declare type QSkuDetails = {
    description: string;
    freeTrialPeriod: string;
    iconUrl: string;
    introductoryPrice: string;
    introductoryPriceAmountMicros: number;
    introductoryPriceCycles: number;
    introductoryPricePeriod: string;
    originalJson: string;
    originalPrice: string;
    originalPriceAmountMicros: number;
    price: string;
    priceAmountMicros: number;
    priceCurrencyCode: string;
    sku: string;
    subscriptionPeriod: string;
    title: string;
    type: string;
    hashCode: number;
    toString: string;
};
declare type QSKProduct = {
    subscriptionPeriod: null | QSKSubscriptionPeriod;
    introductoryPrice: QProductDiscount | null;
    discounts: Array<QProductDiscount> | null;
    localizedDescription: string | undefined;
    localizedTitle: string | undefined;
    price: string;
    priceLocale: QLocale;
    productIdentifier: string | undefined;
    isDownloadable: boolean | undefined;
    downloadContentVersion: string | undefined;
    downloadContentLengths: number[] | undefined;
    productDiscount: SKProductDiscount | undefined;
    subscriptionGroupIdentifier: string | undefined;
    isFamilyShareable: boolean | undefined;
};
declare type QSKSubscriptionPeriod = {
    numberOfUnits: number;
    unit: keyof typeof SKPeriodUnit;
};
declare type QProductDiscount = {
    subscriptionPeriod: null | QSKSubscriptionPeriod;
    price: string;
    numberOfPeriods: number;
    paymentMode: keyof typeof SKProductDiscountPaymentMode;
    identifier?: string;
    type: keyof typeof SKProductDiscountType;
    priceLocale: QLocale;
};
declare type QPaymentDiscount = {
    identifier: string;
    keyIdentifier: string;
    nonce: string;
    signature: string;
    timestamp: number;
};
declare type QLocale = {
    currencySymbol: string | null;
    currencyCode: string | null;
    localeIdentifier: string;
};
export declare type QTrialIntroEligibility = Record<string, {
    status: "non_intro_or_trial_product" | "intro_or_trial_eligible" | "intro_or_trial_ineligible";
}>;
export declare type QEntitlement = {
    id: string;
    productId: string;
    active: boolean;
    renewState: string;
    source: string;
    startedTimestamp: number;
    expirationTimestamp: number;
    renewsCount: number;
    trialStartTimestamp: number;
    firstPurchaseTimestamp: number;
    lastPurchaseTimestamp: number;
    lastActivatedOfferCode: string;
    grantType: string;
    autoRenewDisableTimestamp: number;
    transactions?: Array<QTransaction>;
};
declare type QTransaction = {
    originalTransactionId: string;
    transactionId: string;
    offerCode: string;
    transactionTimestamp: number;
    expirationTimestamp: number;
    transactionRevocationTimestamp: number;
    environment: string;
    ownershipType: string;
    type: string;
    promoOfferId: string;
};
export declare type QOfferings = {
    availableOfferings?: Array<QOffering>;
    main: QOffering;
};
declare type QOffering = {
    id: string;
    tag: keyof typeof OfferingTag;
    products: Array<QProduct>;
};
export declare type QUser = {
    qonversionId: string;
    identityId?: string | null;
};
export declare type QRemoteConfig = {
    payload: Record<string, Object>;
    experiment?: QExperiment | null;
    source: QRemoteConfigurationSource;
};
export declare type QRemoteConfigList = {
    remoteConfigs: Array<QRemoteConfig>;
};
declare type QRemoteConfigurationSource = {
    id: string;
    name: string;
    type: string;
    assignmentType: string;
    contextKey: string | null | undefined;
};
declare type QExperiment = {
    id: string;
    name: string;
    group: QExperimentGroup;
};
declare type QExperimentGroup = {
    id: string;
    name: string;
    type: string;
};
declare type QUserProperty = {
    key: string;
    value: string;
};
export declare type QUserProperties = {
    properties: QUserProperty[];
};
declare class Mapper {
    static convertPromoOffer(promoOffer: QPromotionalOffer | null | undefined): PromotionalOffer | null;
    static convertEntitlements(entitlements: Record<string, QEntitlement> | null | undefined): Map<string, Entitlement>;
    static convertTransaction(transaction: QTransaction): Transaction;
    static convertTransactionType(typeKey: string): TransactionType;
    static convertTransactionOwnershipType(ownershipTypeKey: string): TransactionOwnershipType;
    static convertTransactionEnvironment(envKey: string): TransactionEnvironment;
    static convertEntitlementSource(sourceKey: string): EntitlementSource;
    static convertEntitlementGrantType(typeKey: string): EntitlementGrantType;
    static convertDefinedUserPropertyKey(sourceKey: string): UserPropertyKey;
    static convertUserProperties(properties: QUserProperties): UserProperties;
    static convertProducts(products: Record<string, QProduct> | null | undefined): Map<string, Product>;
    static convertProduct(product: QProduct): Product;
    static convertOfferings(offerings: QOfferings | null | undefined): Offerings | null;
    static convertOffering(offering: QOffering): Offering;
    static convertSkuDetails(skuDetails: QSkuDetails): SkuDetails;
    static convertProductType(productType: string): ProductType;
    static convertSubscriptionPeriod(productPeriod: QSubscriptionPeriod | null | undefined): SubscriptionPeriod | null;
    static convertSubscriptionPeriodUnit(unit: string): SubscriptionPeriodUnit;
    static convertProductPricingPhase(pricingPhase: QProductPricingPhase | null | undefined): ProductPricingPhase | null;
    static convertPrisingPhaseRecurrenceMode(recurrenceMode: string): PricingPhaseRecurrenceMode;
    static convertPrisingPhaseType(type: string): PricingPhaseType;
    static convertProductInstallmentPlanDetails(installmentPlanDetails: QProductInstallmentPlanDetails | null | undefined): ProductInstallmentPlanDetails | null;
    static convertProductOfferDetails(offerDetails: QProductOfferDetails): ProductOfferDetails;
    static convertInAppOfferDetails(inAppOfferDetails: QProductInAppDetails): ProductInAppDetails;
    static convertProductPrice(productPrice: QProductPrice): ProductPrice;
    static convertProductStoreDetails(productStoreDetails: QProductStoreDetails): ProductStoreDetails;
    static convertSKProduct(skProduct: QSKProduct): SKProduct;
    static convertSKSubscriptionPeriod(subscriptionPeriod: QSKSubscriptionPeriod): SKSubscriptionPeriod;
    static convertPaymentDiscount(discount: QPaymentDiscount): SKPaymentDiscount;
    static convertProductDiscount(discount: QProductDiscount): SKProductDiscount;
    static convertDiscounts(discounts: Array<QProductDiscount>): SKProductDiscount[];
    static convertEligibility(eligibilityMap: QTrialIntroEligibility | null | undefined): Map<string, IntroEligibility>;
    static convertEligibilityStatus(status: string): IntroEligibilityStatus;
    static convertActionResult(payload: Record<string, any>): ActionResult;
    static convertQonversionError(payload: Record<string, string> | undefined): QonversionError | undefined;
    static convertUserInfo(user: QUser): User;
    static convertRemoteConfig(remoteConfig: QRemoteConfig): RemoteConfig;
    static convertRemoteConfigList(remoteConfigList: QRemoteConfigList): RemoteConfigList;
    static convertRemoteConfigurationSourceType(type: String): RemoteConfigurationSourceType;
    static convertRemoteConfigurationAssignmentType(type: String): RemoteConfigurationAssignmentType;
    static convertGroupType(type: String): ExperimentGroupType;
    static convertErrorCode(code: string): QonversionErrorCode;
}
export default Mapper;
