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

// 🎛 helper para valores por defecto
const getDefaultCurrentPlanilla = () => ({
  id: null,
  fecha_desde: null,
  fecha_hasta: null,
  titulo: '',
  total: null,
  estado: 'pagado',
  fecha_anulado: null,
  empleado_id: null,
})

export const usePlanillasStore = defineStore('planillas', {
  state: () => ({
    planillas: [],
    currentPlanilla: getDefaultCurrentPlanilla(),
  }),

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

    async fetchPlanillaById(id) {
      try {
        const { data } = await apiClient.get(`/api/planillas/${id}`)
        this.currentPlanilla = data
      } catch (error) {
        console.error(`Error fetching planilla ${id}:`, error)
        this.currentPlanilla = getDefaultCurrentPlanilla()
        const errorMsg = error.response?.data?.message || error.message || 'Ocurrió un error.'
        throw errorMsg
      }
    },

    async createPlanilla(planillaData) {
      try {
        const { data } = await apiClient.post('/api/planillas', planillaData)
        await this.fetchPlanillas()
        return data
      } catch (error) {
        console.error('Error creating planilla:', error)
        const errorMsg = error.response?.data?.message || error.message || 'Ocurrió un error.'
        throw errorMsg
      }
    },

    async updatePlanilla(id, planillaData) {
      try {
        const { data } = await apiClient.put(`/api/planillas/${id}`, planillaData)
        await this.fetchPlanillas()
        this.clearCurrentPlanilla()
        return data
      } catch (error) {
        console.error(`Error updating planilla ${id}:`, error)
        const errorMsg = error.response?.data?.message || error.message || 'Ocurrió un error.'
        throw errorMsg
      }
    },

    async deletePlanilla(id) {
      try {
        await apiClient.delete(`/api/planillas/${id}`)
        await this.fetchPlanillas()
      } catch (error) {
        console.error(`Error deleting planilla ${id}:`, error)
        const errorMsg = error.response?.data?.message || error.message || 'Ocurrió un error.'
        throw errorMsg
      }
    },

    clearCurrentPlanilla() {
      this.currentPlanilla = getDefaultCurrentPlanilla()
    },
  },
})
