import { PopupConfiguration } from '@frontify/frontify-authenticator';

type Token = {
    bearerToken: {
        tokenType: string;
        expiresIn: number;
        accessToken: string;
        refreshToken: string;
        domain: string;
    };
    clientId: string;
    scopes: string[];
};

type FrontifyAsset = {
    id: string;
    externalId: string | null;
    title: string;
    description: string | null;
    creator: {
        name: string;
    };
    createdAt: string;
    type: string;
    author: string | null;
    expiresAt: string | null;
    alternativeText: string | null;
    licenses: {
        title: string;
        text: string;
    }[] | null;
    copyright: {
        status: string;
        notice: string;
    } | null;
    tags: {
        value: string;
        source: string;
    }[] | null;
    customMetadata: {
        property: {
            id: string;
            name: string;
            type: {
                name: string;
            };
        };
        value?: {
            value: string | {
                optionId: string;
                text: string;
            };
        };
        values?: {
            value: {
                optionId: string;
                text: string;
            };
        }[];
    }[];
    filename?: string | null;
    extension?: string;
    size?: number | null;
    downloadUrl?: string | null;
    previewUrl?: string;
    dynamicPreviewUrl?: string | null;
    thumbnailUrl?: string | null;
    icon?: string;
    focalPoint?: number[] | null;
    width?: number;
    height?: number;
    duration?: number;
    bitrate?: number;
    pageCount?: number | null;
};

type FinderOptions = {
    allowMultiSelect?: boolean;
    autoClose?: boolean;
    filters?: FinderFilters;
    permanentDownloadUrls?: boolean;
};
type FinderFilters = FinderFilter[] | [];
type FinderFilter = {
    key: string;
    values: string[];
    inverted: boolean;
};
declare class FrontifyFinder {
    private token;
    private options;
    private onLogoutRequested;
    private parentNode;
    private readonly iFrame;
    private listeners;
    private unsubscribe;
    private static get VERSION();
    constructor(token: Token, options: FinderOptions, onLogoutRequested: () => void);
    private subscribeToFinderEvents;
    private get origin();
    private get domain();
    private get accessToken();
    private initialize;
    private handleFinderCancel;
    private handleAssetsChosen;
    onAssetsChosen(callback: (assets: FrontifyAsset[]) => void): FrontifyFinder;
    onCancel(callback: () => void): FrontifyFinder;
    mount(parentNode: HTMLElement): void;
    close(): void;
}

type ClientConfiguration = {
    clientId: string;
    domain?: string;
};
type OpeningOptions = ClientConfiguration & {
    options?: FinderOptions;
};
declare function create({ clientId, domain, options }: OpeningOptions, popupConfiguration?: PopupConfiguration): Promise<FrontifyFinder>;
declare function logout({ clientId }: {
    clientId: string;
}): Promise<void>;

export { create, logout };
export type { FinderOptions, FrontifyAsset, OpeningOptions, Token };
