import axios from 'axios';

export class WhatsAppService {
  private apiUrl: string;
  private authToken: string;

  constructor(apiUrl: string, authToken: string) {
    this.apiUrl = apiUrl;
    this.authToken = authToken;
  }

  /**
   * Envia uma mensagem de texto via WhatsApp
   * @param phoneNumber Número de telefone do destinatário (formato internacional)
   * @param message Mensagem de texto a ser enviada
   * @returns Resposta da API
   */
  public async sendTextMessage(phoneNumber: string, message: string): Promise<any> {
    try {
      const response = await axios.post(
        `${this.apiUrl}/messages`,
        {
          messaging_product: 'whatsapp',
          recipient_type: 'individual',
          to: phoneNumber,
          type: 'text',
          text: {
            body: message
          }
        },
        {
          headers: {
            'Authorization': `Bearer ${this.authToken}`,
            'Content-Type': 'application/json'
          }
        }
      );

      return response.data;
    } catch (error) {
      console.error('Erro ao enviar mensagem de WhatsApp:', error);
      throw error;
    }
  }

  /**
   * Envia uma mensagem com template via WhatsApp
   * @param phoneNumber Número de telefone do destinatário (formato internacional)
   * @param templateName Nome do template
   * @param language Código do idioma (ex: 'pt_BR')
   * @param components Componentes do template (cabeçalho, corpo, botões)
   * @returns Resposta da API
   */
  public async sendTemplateMessage(
    phoneNumber: string,
    templateName: string,
    language: string = 'pt_BR',
    components: any[] = []
  ): Promise<any> {
    try {
      const response = await axios.post(
        `${this.apiUrl}/messages`,
        {
          messaging_product: 'whatsapp',
          recipient_type: 'individual',
          to: phoneNumber,
          type: 'template',
          template: {
            name: templateName,
            language: {
              code: language
            },
            components: components
          }
        },
        {
          headers: {
            'Authorization': `Bearer ${this.authToken}`,
            'Content-Type': 'application/json'
          }
        }
      );

      return response.data;
    } catch (error) {
      console.error('Erro ao enviar mensagem de template WhatsApp:', error);
      throw error;
    }
  }

  /**
   * Notifica um ganhador de sorteio via WhatsApp
   * @param phoneNumber Número de telefone do ganhador (formato internacional)
   * @param name Nome do ganhador
   * @param prize Prêmio ganho
   * @param instructions Instruções para retirada do prêmio
   * @returns Resposta da API
   */
  public async notifyWinner(
    phoneNumber: string,
    name: string,
    prize: string,
    instructions: string
  ): Promise<any> {
    const message = `Parabéns, ${name}! Você ganhou ${prize}. ${instructions}`;
    return await this.sendTextMessage(phoneNumber, message);
  }
}
