import { defineStore } from 'pinia';
import apiClient from '../apiClient';

const getDefaultEmpleado = () => ({
  id: null,
  created_at: null,
  updated_at: null,
  name: '',
  cedula: null,
  ubicacion: '.',
  grupo_estudio: null,
  empleado: true,
  avatar_url: null,
  telefono: null,
  idciat: null,
});

export const useEmpleadosStore = defineStore('empleados', {
  state: () => ({
    empleados: [],
    currentEmpleado: getDefaultEmpleado(),
  }),

  actions: {
    async fetchEmpleados() {
      try {
        const { data } = await apiClient.get('/api/empleados');
        this.empleados = data;
      } catch (error) {
        console.error('Error al traer empleados:', error);
        const errorMsg = error.response?.data?.message || error.message || 'Ocurrió un error.';
        throw errorMsg;
      }
    },

    async fetchEmpleadoById(id) {
      try {
        const { data } = await apiClient.get(`/api/empleados/${id}`);
        this.currentEmpleado = data;
      } catch (error) {
        console.error(`Error al traer empleado ${id}:`, error);
        this.currentEmpleado = getDefaultEmpleado();
        const errorMsg = error.response?.data?.message || error.message || 'Ocurrió un error.';
        throw errorMsg;
      }
    },

    async createEmpleado(empleadoData) {
      try {
        const { data } = await apiClient.post('/api/empleados/', empleadoData);
        await this.fetchEmpleados();
        return data;
      } catch (error) {
        console.error('Error creando empleado:', error);
        const errorMsg = error.response?.data?.message || error.message || 'Ocurrió un error.';
        throw errorMsg;
      }
    },

    async updateEmpleado(id, empleadoData) {
      try {
        const { data } = await apiClient.put(`/api/empleados/${id}`, empleadoData);
        await this.fetchEmpleados();
        this.clearCurrentEmpleado();
        return data;
      } catch (error) {
        console.error(`Error actualizando empleado ${id}:`, error);
        const errorMsg = error.response?.data?.message || error.message || 'Ocurrió un error.';
        throw errorMsg;
      }
    },

    async deleteEmpleado(id) {
      try {
        await apiClient.delete(`/api/empleados/${id}`);
        await this.fetchEmpleados();
      } catch (error) {
        console.error(`Error eliminando empleado ${id}:`, error);
        const errorMsg = error.response?.data?.message || error.message || 'Ocurrió un error.';
        throw errorMsg;
      }
    },

    clearCurrentEmpleado() {
      this.currentEmpleado = getDefaultEmpleado();
    },
  },
});
