/**
 * Serviço de Notificações
 */

import { apiClient } from "../api/client";
import type {
  Notification,
  CreateNotificationInput,
  NotificationFilters,
} from "./types";

class NotificationService {
  /**
   * Lista notificações na fila
   */
  async list(filters?: NotificationFilters): Promise<Notification[]> {
    const params: Record<string, string> = {};

    if (filters?.status) {
      params.status = filters.status;
    }

    if (filters?.type) {
      params.type = filters.type;
    }

    const response = await apiClient.callFunction<Notification[]>(
      "notifications",
      { method: "GET", filters }
    );

    return response.data;
  }

  /**
   * Cria uma nova notificação na fila
   */
  async create(data: CreateNotificationInput): Promise<Notification> {
    const response = await apiClient.callFunction<Notification>(
      "notifications",
      data
    );

    return response.data;
  }

  /**
   * Envia notificação de lembrete de consulta
   */
  async sendAppointmentReminder(
    appointmentId: string,
    patientPhone: string,
    patientName: string,
    appointmentDate: string
  ): Promise<Notification> {
    return this.create({
      type: "sms",
      payload: {
        appointment_id: appointmentId,
        to: patientPhone,
        message: `Olá ${patientName}, lembramos que você tem uma consulta agendada para ${appointmentDate}.`,
      },
    });
  }

  /**
   * Envia notificação quando vaga abre na lista de espera
   */
  async notifyWaitlistOpening(
    patientPhone: string,
    patientName: string,
    doctorName: string,
    availableDate: string
  ): Promise<Notification> {
    return this.create({
      type: "whatsapp",
      payload: {
        to: patientPhone,
        message: `Olá ${patientName}, abriu uma vaga com Dr(a). ${doctorName} para ${availableDate}. Deseja agendar?`,
      },
    });
  }
}

export const notificationService = new NotificationService();
