declare module 'efi-easy-pix' {
    export interface EfipayConfig {
        clientId: string;
        clientSecret: string;
        certificatePath: string;
        sandbox?: boolean;
    }

    export interface WebhookConfig {
        ngrokToken: string;
        port?: number;
        certificatePath: string;
        sandbox?: boolean;
    }

    export interface QRCode {
        content: string;
        image: {
            base64: string;
            toBuffer(): Buffer;
        };
    }

    export interface PIXData {
        valor: string;
        pagador: {
            chave: string;
            infoPagador?: string;
        };
        favorecido: {
            chave: string;
        };
    }

    export interface ChargeData {
        calendario: {
            expiracao?: number;
            dataDeVencimento?: string;
            validadeAposVencimento?: number;
        };
        devedor: {
            cpf?: string;
            cnpj?: string;
            nome: string;
            logradouro?: string;
            cidade?: string;
            uf?: string;
            cep?: string;
        };
        valor: {
            original: string;
            multa?: {
                modalidade: number;
                valorPerc: string;
            };
            juros?: {
                modalidade: number;
                valorPerc: string;
            };
            desconto?: {
                modalidade: number;
                descontoDataFixa?: Array<{
                    data: string;
                    valorPerc: string;
                }>;
            };
        };
        chave: string;
        solicitacaoPagador: string;
    }

    export interface RefundData {
        valor: string;
    }

    export interface ListParams {
        inicio: string;
        fim: string;
        status?: string;
        cpf?: string;
        cnpj?: string;
    }

    export class EfipayClient {
        constructor(config: EfipayConfig);
        
        // PIX Send Methods
        sendPix(idEnvio: string, pixData: PIXData): Promise<any>;
        getSentPixByE2eId(e2eId: string): Promise<any>;
        getSentPixByIdEnvio(idEnvio: string): Promise<any>;
        listSentPix(params: ListParams): Promise<any>;

        // QR Code Methods
        generateQRCode(chargeData: ChargeData): Promise<QRCode>;
        generateQRCodeWithDueDate(chargeData: ChargeData): Promise<QRCode>;
        getQRCodeDetails(qrCode: QRCode): Promise<any>;
        payQrCode(idEnvio: string, paymentData: PIXData): Promise<any>;

        // PIX Charge Methods
        createCharge(chargeData: ChargeData): Promise<any>;
        createChargeWithTxid(txid: string, chargeData: ChargeData): Promise<any>;
        updateCharge(txid: string, chargeData: Partial<ChargeData>): Promise<any>;
        getCharge(txid: string, revision?: number): Promise<any>;
        listCharges(params: ListParams): Promise<any>;

        // PIX Charge with Due Date Methods
        createDueDateCharge(txid: string, chargeData: ChargeData): Promise<any>;
        updateDueDateCharge(txid: string, chargeData: Partial<ChargeData>): Promise<any>;
        getDueDateCharge(txid: string, revision?: number): Promise<any>;
        listDueDateCharges(params: ListParams): Promise<any>;

        // PIX Transaction Methods
        getPixTransaction(e2eId: string, showBankCode?: boolean): Promise<any>;
        listPixTransactions(params: ListParams): Promise<any>;
        requestRefund(e2eId: string, refundId: string, refundData: RefundData): Promise<any>;
        getRefund(e2eId: string, refundId: string): Promise<any>;

        // Webhook Methods
        configureWebhook(chave: string, webhookUrl: string, skipMtls?: boolean): Promise<any>;
        getWebhookInfo(chave: string): Promise<any>;
        listWebhooks(params: ListParams): Promise<any>;
        deleteWebhook(chave: string): Promise<any>;
        resendWebhook(type: string, e2eids: string[]): Promise<any>;

        // Automatic PIX Webhook Methods
        configureAutoPixWebhook(webhookUrl: string): Promise<any>;
        getAutoPixWebhookInfo(): Promise<any>;
        deleteAutoPixWebhook(): Promise<any>;

        // Automatic PIX Charge Webhook Methods
        configureAutoPixChargeWebhook(webhookUrl: string): Promise<any>;
        getAutoPixChargeWebhookInfo(): Promise<any>;
        deleteAutoPixChargeWebhook(): Promise<any>;
    }

    export class WebhookHandler {
        constructor(config: WebhookConfig);
        start(): Promise<string>;
        stop(): Promise<void>;
        on(event: 'pixReceived' | 'pixRefund' | 'pixSent', listener: (data: any) => void): void;
    }
} 