import { Injectable } from '@nestjs/common';

@Injectable()
export class WhatsappService {
  private enabled() {
    return (
      process.env.ENABLE_WHATSAPP ===
      'true'
    );
  }

  private provider() {
    if (
      process.env.WHATSAPP_ACCESS_TOKEN
    ) {
      return 'meta';
    }

    if (
      process.env.TWILIO_ACCOUNT_SID
    ) {
      return 'twilio';
    }

    return 'log';
  }

  private async send(
    type: string,
    payload: any,
  ) {
    const provider =
      this.provider();

    if (!this.enabled()) {
      console.log(
        '[WHATSAPP DISABLED]',
        {
          provider,
          type,
          payload,
        },
      );

      return {
        success: true,
        simulated: true,
        provider,
      };
    }

    if (provider === 'meta') {
      console.log(
        '[META WHATSAPP]',
        {
          type,
          payload,
        },
      );

      return {
        success: true,
        provider,
      };
    }

    if (provider === 'twilio') {
      console.log(
        '[TWILIO WHATSAPP]',
        {
          type,
          payload,
        },
      );

      return {
        success: true,
        provider,
      };
    }

    return {
      success: true,
      provider,
    };
  }

  async sendInvoicePdf(data: any) {
    return this.send(
      'invoice_pdf',
      data,
    );
  }

  async sendAdvanceReceiptPdf(data: any) {
    return this.send(
      'advance_receipt_pdf',
      data,
    );
  }

  async sendDepositReceiptPdf(data: any) {
    return this.send(
      'deposit_receipt_pdf',
      data,
    );
  }

  async sendCreditNotePdf(data: any) {
    return this.send(
      'credit_note_pdf',
      data,
    );
  }

  async sendPaymentLink(data: any) {
    return this.send(
      'payment_link',
      data,
    );
  }

  async sendPaymentQr(data: any) {
    return this.send(
      'payment_qr',
      data,
    );
  }
}
