import { useCallback, useEffect, useState } from "react"; import { api } from "../services/api"; import type { User } from "../types"; export const useEmployees = ( filters?: { role?: string; departmentId?: number }, ) => { const [employees, setEmployees] = useState([]); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const fetchEmployees = useCallback(async () => { setLoading(true); setError(null); try { const data = await api.getUsers(filters); setEmployees(data); } catch (err: never) { setError(err.message || "Failed to fetch employees"); console.error("Failed to fetch employees:", err); } finally { setLoading(false); } }, [filters]); useEffect(() => { fetchEmployees(); }, [fetchEmployees]); const createEmployee = async (data: Omit) => { setLoading(true); setError(null); try { const newEmployee = await api.createUser(data); await fetchEmployees(); // Refresh list return newEmployee; } catch (err: never) { setError(err.message || "Failed to create employee"); console.error("Failed to create employee:", err); throw err; } finally { setLoading(false); } }; const updateEmployee = async ( id: number, data: Partial>, ) => { setLoading(true); setError(null); try { const updated = await api.updateUser(id, data); await fetchEmployees(); // Refresh list return updated; } catch (err: never) { setError(err.message || "Failed to update employee"); console.error("Failed to update employee:", err); throw err; } finally { setLoading(false); } }; const deleteEmployee = async (id: number) => { setLoading(true); setError(null); try { await api.deleteUser(id); await fetchEmployees(); // Refresh list } catch (err: never) { setError(err.message || "Failed to delete employee"); console.error("Failed to delete employee:", err); throw err; } finally { setLoading(false); } }; return { employees, loading, error, refresh: fetchEmployees, createEmployee, updateEmployee, deleteEmployee, }; };