import { AbstractIssuanceBrandingStore } from '@sphereon/ssi-sdk.data-store';
import { FindCredentialBrandingArgs } from '@sphereon/ssi-sdk.data-store';
import { FindCredentialLocaleBrandingArgs } from '@sphereon/ssi-sdk.data-store';
import { FindIssuerBrandingArgs } from '@sphereon/ssi-sdk.data-store';
import { FindIssuerLocaleBrandingArgs } from '@sphereon/ssi-sdk.data-store';
import { IAgentContext } from '@veramo/core';
import { IAgentPlugin } from '@veramo/core';
import { IBasicCredentialLocaleBranding } from '@sphereon/ssi-sdk.data-store';
import { IBasicImageDimensions } from '@sphereon/ssi-sdk.data-store';
import { IBasicIssuerLocaleBranding } from '@sphereon/ssi-sdk.data-store';
import { ICredentialBranding } from '@sphereon/ssi-sdk.data-store';
import { ICredentialLocaleBranding } from '@sphereon/ssi-sdk.data-store';
import { IIssuerBranding } from '@sphereon/ssi-sdk.data-store';
import { IIssuerLocaleBranding } from '@sphereon/ssi-sdk.data-store';
import { ILocaleBranding } from '@sphereon/ssi-sdk.data-store';
import { IPluginMethodMap } from '@veramo/core';

export declare interface IAddCredentialBrandingArgs {
    issuerCorrelationId: string;
    vcHash: string;
    localeBranding: Array<IBasicCredentialLocaleBranding>;
}

export declare interface IAddCredentialLocaleBrandingArgs {
    credentialBrandingId: string;
    localeBranding: Array<IBasicCredentialLocaleBranding>;
}

export declare interface IAddIssuerBrandingArgs {
    issuerCorrelationId: string;
    localeBranding: Array<IBasicIssuerLocaleBranding>;
}

export declare interface IAddIssuerLocaleBrandingArgs {
    issuerBrandingId: string;
    localeBranding: Array<IBasicIssuerLocaleBranding>;
}

export declare interface IAdditionalImageAttributes {
    mediaType?: string;
    dataUri?: string;
    dimensions: IBasicImageDimensions;
}

export declare interface ICredentialBrandingFromArgs {
    localeBranding: IBasicCredentialLocaleBranding;
}

export declare interface IDeletionResult {
    result: boolean;
    error?: string;
}

export declare interface IGetCredentialBrandingArgs {
    filter?: FindCredentialBrandingArgs;
}

export declare interface IGetCredentialLocaleBrandingArgs {
    filter?: FindCredentialLocaleBrandingArgs;
}

export declare interface IGetIssuerBrandingArgs {
    filter?: FindIssuerBrandingArgs;
}

export declare interface IGetIssuerLocaleBrandingArgs {
    filter?: FindIssuerLocaleBrandingArgs;
}

export declare interface IIssuanceBranding extends IPluginMethodMap {
    ibAddCredentialBranding(args: IAddCredentialBrandingArgs, context: IRequiredContext): Promise<ICredentialBranding>;
    ibGetCredentialBranding(args: IGetCredentialBrandingArgs): Promise<Array<ICredentialBranding>>;
    ibUpdateCredentialBranding(args: IUpdateCredentialBrandingArgs, context: IRequiredContext): Promise<ICredentialBranding>;
    ibRemoveCredentialBranding(args: IRemoveCredentialBrandingArgs, context: IRequiredContext): Promise<IDeletionResult>;
    ibAddCredentialLocaleBranding(args: IAddCredentialLocaleBrandingArgs, context: IRequiredContext): Promise<ICredentialBranding>;
    ibGetCredentialLocaleBranding(args: IGetCredentialLocaleBrandingArgs): Promise<Array<ICredentialLocaleBranding>>;
    ibRemoveCredentialLocaleBranding(args: IRemoveCredentialLocaleBrandingArgs, context: IRequiredContext): Promise<IDeletionResult>;
    ibUpdateCredentialLocaleBranding(args: IUpdateCredentialLocaleBrandingArgs, context: IRequiredContext): Promise<ICredentialLocaleBranding>;
    ibCredentialLocaleBrandingFrom(args: ICredentialBrandingFromArgs, context: IRequiredContext): Promise<IBasicCredentialLocaleBranding>;
    ibAddIssuerBranding(args: IAddIssuerBrandingArgs, context: IRequiredContext): Promise<IIssuerBranding>;
    ibGetIssuerBranding(args: IGetIssuerBrandingArgs): Promise<Array<IIssuerBranding>>;
    ibUpdateIssuerBranding(args: IUpdateIssuerBrandingArgs, context: IRequiredContext): Promise<IIssuerBranding>;
    ibRemoveIssuerBranding(args: IRemoveIssuerBrandingArgs, context: IRequiredContext): Promise<IDeletionResult>;
    ibAddIssuerLocaleBranding(args: IAddIssuerLocaleBrandingArgs, context: IRequiredContext): Promise<IIssuerBranding>;
    ibGetIssuerLocaleBranding(args: IGetIssuerLocaleBrandingArgs): Promise<Array<IIssuerLocaleBranding>>;
    ibRemoveIssuerLocaleBranding(args: IRemoveIssuerLocaleBrandingArgs, context: IRequiredContext): Promise<IDeletionResult>;
    ibUpdateIssuerLocaleBranding(args: IUpdateIssuerLocaleBrandingArgs, context: IRequiredContext): Promise<IIssuerLocaleBranding>;
    ibIssuerLocaleBrandingFrom(args: IIssuerBrandingFromArgs, context: IRequiredContext): Promise<IBasicIssuerLocaleBranding>;
}

export declare interface IIssuerBrandingFromArgs {
    localeBranding: IBasicIssuerLocaleBranding;
}

export declare interface IRemoveCredentialBrandingArgs {
    filter: FindCredentialBrandingArgs;
}

export declare interface IRemoveCredentialLocaleBrandingArgs {
    filter: FindCredentialLocaleBrandingArgs;
}

export declare interface IRemoveIssuerBrandingArgs {
    filter: FindIssuerBrandingArgs;
}

export declare interface IRemoveIssuerLocaleBrandingArgs {
    filter: FindIssuerLocaleBrandingArgs;
}

export declare type IRequiredContext = IAgentContext<never>;

/**
 * {@inheritDoc IIssuanceBranding}
 */
export declare class IssuanceBranding implements IAgentPlugin {
    readonly schema: any;
    readonly methods: IIssuanceBranding;
    private readonly store;
    constructor(options: {
        store: AbstractIssuanceBrandingStore;
    });
    /** {@inheritDoc IIssuanceBranding.ibAddCredentialBranding} */
    private ibAddCredentialBranding;
    /** {@inheritDoc IIssuanceBranding.ibGetCredentialBranding} */
    private ibGetCredentialBranding;
    /** {@inheritDoc IIssuanceBranding.ibUpdateCredentialBranding} */
    private ibUpdateCredentialBranding;
    /** {@inheritDoc IIssuanceBranding.ibRemoveCredentialBranding} */
    private ibRemoveCredentialBranding;
    /** {@inheritDoc IIssuanceBranding.ibAddCredentialLocaleBranding} */
    private ibAddCredentialLocaleBranding;
    /** {@inheritDoc IIssuanceBranding.ibGetCredentialLocaleBranding} */
    private ibGetCredentialLocaleBranding;
    /** {@inheritDoc IIssuanceBranding.ibRemoveCredentialLocaleBranding} */
    private ibRemoveCredentialLocaleBranding;
    /** {@inheritDoc IIssuanceBranding.ibUpdateCredentialLocaleBranding} */
    private ibUpdateCredentialLocaleBranding;
    /** {@inheritDoc IIssuanceBranding.ibCredentialLocaleBrandingFrom} */
    private ibCredentialLocaleBrandingFrom;
    /** {@inheritDoc IIssuanceBranding.ibAddIssuerBranding} */
    private ibAddIssuerBranding;
    /** {@inheritDoc IIssuanceBranding.ibGetIssuerBranding} */
    private ibGetIssuerBranding;
    /** {@inheritDoc IIssuanceBranding.ibUpdateIssuerBranding} */
    private ibUpdateIssuerBranding;
    /** {@inheritDoc IIssuanceBranding.inRemoveIssuerBranding} */
    private inRemoveIssuerBranding;
    /** {@inheritDoc IIssuanceBranding.ibAddIssuerLocaleBranding} */
    private ibAddIssuerLocaleBranding;
    /** {@inheritDoc IIssuanceBranding.ibAGetIssuerLocaleBranding} */
    private ibAGetIssuerLocaleBranding;
    /** {@inheritDoc IIssuanceBranding.ibRemoveIssuerLocaleBranding} */
    private ibRemoveIssuerLocaleBranding;
    /** {@inheritDoc IIssuanceBranding.ibUpdateIssuerLocaleBranding} */
    private ibUpdateIssuerLocaleBranding;
    /** {@inheritDoc IIssuanceBranding.ibIssuerLocaleBrandingFrom} */
    private ibIssuerLocaleBrandingFrom;
    private setAdditionalImageAttributes;
    private getAdditionalImageAttributes;
    private extractBase64FromDataURI;
    private getDataTypeFromDataURI;
}

export declare const issuanceBrandingMethods: Array<string>;

export declare interface IUpdateCredentialBrandingArgs {
    credentialBranding: Omit<ICredentialBranding, 'localeBranding' | 'createdAt' | 'lastUpdatedAt'>;
}

export declare interface IUpdateCredentialLocaleBrandingArgs {
    localeBranding: Omit<ILocaleBranding, 'createdAt' | 'lastUpdatedAt'>;
}

export declare interface IUpdateIssuerBrandingArgs {
    issuerBranding: Omit<IIssuerBranding, 'localeBranding' | 'createdAt' | 'lastUpdatedAt'>;
}

export declare interface IUpdateIssuerLocaleBrandingArgs {
    localeBranding: Omit<ILocaleBranding, 'createdAt' | 'lastUpdatedAt'>;
}

/**
 * @public
 */
export declare const schema: any;

export { }
