import { IPluginMethodMap, IAgentContext, IAgentPlugin } from '@veramo/core';

interface IQRCodeGenerator extends IPluginMethodMap {
    qrDIDCommOobInvitationElement(args: CreateElementArgs<QRType.DIDCOMM_V2_OOB_INVITATION, DIDCommV2OOBInvitationData>, context: IRequiredContext): Promise<JSX.Element>;
    qrDIDCommOobInvitationValue(args: CreateValueArgs<QRType.DIDCOMM_V2_OOB_INVITATION, DIDCommV2OOBInvitationData>, context: IRequiredContext): Promise<string>;
    qrSIOPv2Element(args: CreateElementArgs<QRType.SIOPV2, SIOPv2DataWithScheme>, context: IRequiredContext): Promise<JSX.Element>;
    qrSIOPv2Value(args: CreateValueArgs<QRType.SIOPV2, SIOPv2DataWithScheme>, context: IRequiredContext): Promise<string>;
    qrURIElement(args: CreateElementArgs<QRType.URI, URIData>, context: IRequiredContext): Promise<JSX.Element>;
    qrOpenID4VCIElement(args: CreateElementArgs<QRType.OpenID4VCI, OpenID4VCIDataWithScheme>, context: IRequiredContext): Promise<JSX.Element>;
    qrOpenID4VCIValue(args: CreateValueArgs<QRType.OpenID4VCI, OpenID4VCIDataWithScheme>, context: IRequiredContext): Promise<string>;
}
interface CreateValueArgs<T extends QRType, D> {
    onGenerate?: (result: ValueResult<T, D>) => void;
    data: QRData<T, D>;
}
interface CreateElementArgs<T extends QRType, D> extends CreateValueArgs<T, D> {
    renderingProps: QRRenderingProps;
}
interface ValueResult<T extends QRType, D> {
    id: string;
    value: string;
    data: QRData<T, D>;
    renderingProps?: QRRenderingProps;
    context?: IRequiredContext;
}
declare enum QRType {
    URI = "uri",
    SIOPV2 = "openid-vc",
    DIDCOMM_V2_OOB_INVITATION = "https://didcomm.org/out-of-band/2.0/invitation",
    OpenID4VCI = "openid-credential-offer"
}
type SIOPv2Scheme = 'openid' | 'openid-vc' | string;
interface SIOPv2DataWithScheme {
    scheme?: SIOPv2Scheme;
    requestUri: string;
}
type OpenID4VCIScheme = 'openid-credential-offer' | 'https' | string;
interface OpenID4VCIDataWithScheme {
    scheme?: OpenID4VCIScheme;
    baseUri?: string;
    credentialOfferUri?: string;
    credentialOffer?: string;
}
interface DIDCommV2OOBInvitationData {
    baseURI: string;
    oobInvitation: DIDCommV2OOBInvitation;
}
/**
 * {
 *   "type": "https://didcomm.org/out-of-band/2.0/invitation",
 *   "id": "599f3638-b563-4937-9487-dfe55099d900",
 *   "from": "did:example:verifier",
 *   "body": {
 *       "goal_code": "streamlined-vp",
 *       "accept": ['didcomm/v2']
 *   }
 * }
 */
interface DIDCommV2OOBInvitation {
    type: 'https://didcomm.org/out-of-band/2.0/invitation';
    id: string;
    from: DID;
    body: Body;
}
type URIData = string;
type DID = string;
interface Body {
    goal_code: GoalCode;
    accept: [AcceptMode];
}
type GoalCode = 'streamlined-vp' | 'streamlined-vc';
type AcceptMode = 'didcomm/v2' | string;
declare enum StatusCode {
    OK = "OK",
    CREATED = "CREATED"
}
interface QRData<T extends QRType, D> {
    id: string;
    type: T;
    object: D;
}
interface QRRenderingProps {
    bgColor?: string;
    fgColor?: string;
    level?: 'L' | 'M' | 'Q' | 'H';
    size?: number;
    title?: string;
}
declare enum events {
    QR_CODE_CODE_CREATED = "QrCodeCreated"
}
type IRequiredContext = IAgentContext<Record<string, never>>;

/**
 * {@inheritDoc IQRCodeGenerator}
 */
declare class QrCodeProvider implements IAgentPlugin {
    readonly methods: IQRCodeGenerator;
    /** {@inheritDoc IQRCodeGenerator.uriElement} */
    private static qrURIElement;
    /** {@inheritDoc IQRCodeGenerator.didCommOobInvitationValue} */
    private static qrDIDCommOobInvitationValue;
    /** {@inheritDoc IQRCodeGenerator.didCommOobInvitationElement} */
    private static qrDIDCommOobInvitationElement;
    /** {@inheritDoc IQRCodeGenerator.siopv2Value} */
    private static qrSIOPv2Value;
    /** {@inheritDoc IQRCodeGenerator.siopv2Element} */
    private static qrSIOPv2Element;
    /** {@inheritDoc IQRCodeGenerator.qrOpenID4VCIElement} */
    private static qrOpenID4VCIElement;
    /** {@inheritDoc IQRCodeGenerator.qrOpenID4VCIValue} */
    private static qrOpenID4VCIValue;
}

export { type AcceptMode, type Body, type CreateElementArgs, type CreateValueArgs, type DID, type DIDCommV2OOBInvitation, type DIDCommV2OOBInvitationData, type GoalCode, type IQRCodeGenerator, type IRequiredContext, type OpenID4VCIDataWithScheme, type OpenID4VCIScheme, type QRData, type QRRenderingProps, QRType, QrCodeProvider, type SIOPv2DataWithScheme, type SIOPv2Scheme, StatusCode, type URIData, type ValueResult, events };
