import { defineStore } from 'pinia'
import { ref } from 'vue'
import type { Employee } from '@/types/Employee'
import * as employeeService from '@/services/employee'

export const useEmployeeStore = defineStore('employee', () => {
  const employees = ref<Employee[]>([])
  const loading = ref<boolean>(false)
  const error = ref<string | null>(null)

  const IMAGE_BASE_URL = import.meta.env.VITE_EMP_IMAGE_BASE || ''
  const FALLBACK_IMAGE = '/images/noimage.jpg'

  // ✅ ดึงรายการ Employee ทั้งหมดจาก backend และแปะ path รูป
  async function fetchEmployees() {
    loading.value = true
    error.value = null
    try {
      const res = await employeeService.listEmployees()
      employees.value = res.map((e) => ({
        ...e,
        image: e.image ? IMAGE_BASE_URL + e.image : FALLBACK_IMAGE
      }))
    } catch (err: any) {
      error.value = err.message || 'Unknown Error'
    } finally {
      loading.value = false
    }
  }

  // ✅ ดึง Employee รายการเดียว พร้อมแปะ path รูป
  async function fetchEmployee(id: number): Promise<Employee | null> {
    loading.value = true
    error.value = null
    try {
      const res = await employeeService.getEmployee(id)
      return {
        ...res,
        image: res.image ? IMAGE_BASE_URL + res.image : FALLBACK_IMAGE
      }
    } catch (err: any) {
      error.value = err.message || 'Unknown Error'
      return null
    } finally {
      loading.value = false
    }
  }

  // ✅ สร้าง Employee ใหม่
  async function addEmployee(payload: Partial<Employee>) {
    loading.value = true
    error.value = null
    try {
      const newEmployee = await employeeService.createEmployee(payload)
      newEmployee.image = newEmployee.image ? IMAGE_BASE_URL + newEmployee.image : FALLBACK_IMAGE
      employees.value.push(newEmployee)
    } catch (err: any) {
      error.value = err.message || 'Unknown Error'
    } finally {
      loading.value = false
    }
  }

  // ✅ อัปเดตข้อมูล Employee
  async function editEmployee(id: number, payload: Partial<Employee>) {
    loading.value = true
    error.value = null
    try {
      const updated = await employeeService.updateEmployee(id, payload)
      updated.image = updated.image ? IMAGE_BASE_URL + updated.image : FALLBACK_IMAGE

      const index = employees.value.findIndex((e) => e.EmployeeID === id)
      if (index !== -1) {
        employees.value[index] = updated
      }
    } catch (err: any) {
      error.value = err.message || 'Unknown Error'
    } finally {
      loading.value = false
    }
  }

  // ✅ ลบ Employee
  async function removeEmployee(id: number) {
    loading.value = true
    error.value = null
    try {
      await employeeService.deleteEmployee(id)
      employees.value = employees.value.filter((e) => e.EmployeeID !== id)
    } catch (err: any) {
      error.value = err.message || 'Unknown Error'
    } finally {
      loading.value = false
    }
  }

  return {
    employees,
    loading,
    error,
    fetchEmployees,
    fetchEmployee,
    addEmployee,
    editEmployee,
    removeEmployee
  }
})