import { PkpassPassStyleTypes, PkpassFieldsType, PkpassTransitTypes, PkpassDataDetectorTypes, PkpassTextAlignTypes, PkpassDateStyleTypes, PkpassNumberStyleTypes } from './pkpass';
declare type UUID = string;
export interface TranslatedImageReference {
    [key: string]: UUID;
}
export declare type ImageReference = UUID | TranslatedImageReference;
export interface ImageReferenceMap {
    logo?: ImageReference;
    icon?: ImageReference;
    strip?: ImageReference;
    thumbnail?: ImageReference;
    footer?: ImageReference;
    background?: ImageReference;
}
export interface TemplatePkpassAssociatedApp {
    type: 'object';
    properties: {
        idGooglePlay: {
            value: string;
            type: 'string';
        };
    };
}
export interface TemplatePkpassAssociatedStoreIdentifier {
    value: number;
    type: 'number';
}
export interface TemplatePkpassBarcodes {
    type: 'array';
    items: TemplatePkpassBarcode[];
}
interface JsonTemplateBase {
    organizationName?: {
        value: string;
        type: 'string';
        fallback?: string;
    };
    barcodes?: TemplatePkpassBarcodes;
    beacons?: {
        type: 'array';
        items: TemplatePkpassBeacon[];
    };
    location?: {
        type: 'array';
        items: TemplatePkpassLocation[];
    };
    description?: {
        type: 'string';
        value: ILocalizable;
        fallback?: string;
    };
    logoText?: {
        type: 'string';
        value: ILocalizable;
        fallback?: string;
    };
    associatedStoreIdentifiers?: {
        type: 'array';
        items: TemplatePkpassAssociatedStoreIdentifier[];
    };
    associatedApps?: {
        type: 'array';
        items: TemplatePkpassAssociatedApp[];
    };
    backgroundColor?: {
        type: 'string';
        value: string;
        fallback?: string;
    };
    labelColor?: {
        type: 'string';
        value: string;
        fallback?: string;
    };
    foregroundColor?: {
        type: 'string';
        value: string;
        fallback?: string;
    };
}
export declare type JsonTemplate = JsonTemplateBase & {
    [PkpassPassStyleTypes.BoardingPass]?: TemplatePkpassStyleBoardingPass;
    [PkpassPassStyleTypes.Coupon]?: TemplatePkpassStyle;
    [PkpassPassStyleTypes.EventTicket]?: TemplatePkpassStyle;
    [PkpassPassStyleTypes.Generic]?: TemplatePkpassStyle;
    [PkpassPassStyleTypes.StoreCard]?: TemplatePkpassStyle;
};
export interface Template {
    images?: ImageReferenceMap;
    languages: string[];
    jsonTemplate: JsonTemplate;
}
export interface TemplatePkpassStyleBoardingPass {
    type: 'object';
    properties: {
        [PkpassFieldsType.AuxiliaryFields]?: TemplatePkpassFields;
        [PkpassFieldsType.BackFields]?: TemplatePkpassFields;
        [PkpassFieldsType.HeaderFields]?: TemplatePkpassFields;
        [PkpassFieldsType.PrimaryFields]?: TemplatePkpassFields;
        [PkpassFieldsType.SecondaryFields]?: TemplatePkpassFields;
        transitType: {
            type: 'string';
            value: PkpassTransitTypes;
        };
    };
}
export interface TemplatePkpassStyle {
    type: 'object';
    properties: {
        [PkpassFieldsType.AuxiliaryFields]?: TemplatePkpassFields;
        [PkpassFieldsType.BackFields]?: TemplatePkpassFields;
        [PkpassFieldsType.HeaderFields]?: TemplatePkpassFields;
        [PkpassFieldsType.PrimaryFields]?: TemplatePkpassFields;
        [PkpassFieldsType.SecondaryFields]?: TemplatePkpassFields;
    };
}
export declare type ILocalizable = string | {
    [key: string]: string;
};
export interface TemplatePkpassFields {
    type: 'array';
    items: TemplatePkpassField[];
}
export interface TemplatePkpassField {
    type: 'object';
    properties: {
        key: {
            type: 'string';
            value: string;
        };
        attributedValue?: {
            type: 'string';
            value: ILocalizable | number | Date;
            fallback?: string;
        };
        value?: {
            type: 'string';
            value: ILocalizable | number | Date;
            fallback?: string;
        };
        changeMessage?: {
            type: 'string';
            value: ILocalizable;
            fallback?: string;
        };
        dataDetectorTypes?: {
            type: 'array';
            items: PkpassDataDetectorTypes[];
        };
        label?: {
            type: 'string';
            value: ILocalizable;
            fallback?: string;
        };
        textAlignment?: {
            type: 'string';
            value: PkpassTextAlignTypes;
        };
        dateStyle?: {
            type: 'string';
            value: PkpassDateStyleTypes;
        };
        timeStyle?: {
            type: 'string';
            value: PkpassDateStyleTypes;
        };
        ignoresTimeZone?: {
            type: 'boolean';
            value: boolean;
        };
        isRelative?: {
            type: 'boolean';
            value: boolean;
        };
        currencyCode?: {
            type: 'string';
            value: string;
        };
        numberStyle?: {
            type: 'string';
            value: PkpassNumberStyleTypes;
        };
    };
}
export interface TemplatePkpassLocation {
    type: 'object';
    properties: {
        altitude?: {
            type: 'number';
            value: number;
        };
        latitude: {
            type: 'number';
            value: number;
        };
        longitude: {
            type: 'number';
            value: number;
        };
        relevantText?: {
            type: 'string';
            value: string;
        };
    };
}
export interface TemplatePkpassBeacon {
    type: 'object';
    properties: {
        proximityUUID: {
            type: 'string';
            value: string;
        };
        major?: {
            type: 'number';
            value: number;
        };
        minor?: {
            type: 'number';
            value: number;
        };
        relevantText?: {
            type: 'string';
            value: string;
        };
    };
}
export interface TemplatePkpassBarcode {
    type: 'object';
    properties: {
        format: {
            type: 'string';
            value: string;
        };
        altText?: {
            type: 'string';
            value: string;
        };
        message?: {
            type: 'string';
            value: string;
        };
        messageEncoding: {
            type: 'string';
            value: string;
        };
    };
}
export declare type LocalizedString = {
    [key: string]: string;
};
export {};
