/**
 * Availability Service
 *
 * Serviço para gerenciamento de disponibilidade dos médicos
 */

import { apiClient } from "../api/client";
import {
  DoctorAvailability,
  ListAvailabilityFilters,
  CreateAvailabilityInput,
  UpdateAvailabilityInput,
} from "./types";

class AvailabilityService {
  private readonly basePath = "/doctor-availability";

  /**
   * Lista as disponibilidades dos médicos
   */
  async list(filters?: ListAvailabilityFilters): Promise<DoctorAvailability[]> {
    const response = await apiClient.get<DoctorAvailability[]>(this.basePath, {
      params: filters,
    });
    return response.data;
  }

  /**
   * Cria uma nova configuração de disponibilidade
   */
  async create(data: CreateAvailabilityInput): Promise<DoctorAvailability> {
    const response = await apiClient.post<DoctorAvailability>(
      this.basePath,
      data
    );
    return response.data;
  }

  /**
   * Atualiza uma configuração de disponibilidade
   */
  async update(
    id: string,
    data: UpdateAvailabilityInput
  ): Promise<DoctorAvailability> {
    const response = await apiClient.patch<DoctorAvailability>(
      `${this.basePath}/${id}`,
      data
    );
    return response.data;
  }

  /**
   * Remove uma configuração de disponibilidade
   */
  async delete(id: string): Promise<void> {
    await apiClient.delete(`${this.basePath}/${id}`);
  }
}

export const availabilityService = new AvailabilityService();
