import api from '@/services/api';
import { handleRequest } from '@/services/serviceUtils';

const ENDPOINT_VEHICLES = '/cadastro_frota';
const ENDPOINT_AVAILABILITY = '/disponibilidade_frota';

export const fleetService = {
  // --- Veículos (Cadastro Frota) ---
  
  /**
   * Lista todos os veículos cadastrados.
   * Mapeia os campos do backend para um formato consistente, se necessário.
   */
  getVehicles: () => handleRequest({
    apiFn: async () => {
      const { data } = await api.get(`${ENDPOINT_VEHICLES}/apresentar`);
        // O backend retorna uma lista pura
      return data;
    }
  }),

  /**
   * Cria um novo veículo.
   * Payload completo conforme especificação:
   * - Dados Básicos: placa, chassi, renavam, modelo, fabricante, cor, ano_fabricacao, ano_modelo
   * - Classificação: categoria, tipo_frota, tipo_de_placa, atuacao
   * - Operacional: base, uf, proprietario, cnpj, contrato
   * - Responsáveis: gestor, coordenador, dispatcher, fiscal_operacao
   * - Financeiro: valor_fipe, valor_aluguel, primeira_locacao, data_limite
   * - Rastreadores (Boolean string/flag): geotab, sascar, golfleet, pooltrack, t4s
   */
  createVehicle: (vehicleData) => handleRequest({
    apiFn: async () => {
      // Garante que booleanos ou nulos sejam tratados conforme o backend espera (strings ou null)
      const payload = {
        ...vehicleData,
        // Exemplo de normalização se necessário, mas enviaremos raw do form por enquanto
      };
      const { data } = await api.post(ENDPOINT_VEHICLES, payload);
      return data;
    }
  }),

  /**
   * Atualiza um veículo existente.
   * @param {number} id - idveiculo_frota
   * @param {Object} vehicleData - Dados completos para atualização
   */
  updateVehicle: (id, vehicleData) => handleRequest({
    apiFn: async () => {
      const { data } = await api.put(`${ENDPOINT_VEHICLES}/${id}`, vehicleData);
      return data;
    }
  }),

  // --- Disponibilidade ---

  getAvailability: () => handleRequest({
    apiFn: async () => {
      const { data } = await api.get(`${ENDPOINT_AVAILABILITY}/apresentar`);
      return data;
    }
  })
};
