import { useState, useEffect } from 'react'; import { apiClient } from '../services/api-client'; import { PhaseChantier, StatutPhaseChantier } from '../types/phases'; export const usePhases = () => { const [phases, setPhases] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const fetchPhases = async () => { try { setLoading(true); const response = await apiClient.get('/phases'); setPhases(response.data); setError(null); } catch (err) { console.error('Erreur lors du chargement des phases:', err); setError('Erreur lors du chargement des phases'); } finally { setLoading(false); } }; const getPhasesByChantier = async (chantierId: string) => { try { const response = await apiClient.get(`/phases/chantier/${chantierId}`); return response.data; } catch (err) { console.error('Erreur lors du chargement des phases du chantier:', err); throw err; } }; const getPhasesByStatut = async (statut: StatutPhaseChantier) => { try { const response = await apiClient.get(`/phases/statut/${statut}`); return response.data; } catch (err) { console.error('Erreur lors du chargement des phases par statut:', err); throw err; } }; const getPhasesEnRetard = async () => { try { const response = await apiClient.get('/phases/en-retard'); return response.data; } catch (err) { console.error('Erreur lors du chargement des phases en retard:', err); throw err; } }; const getPhasesCritiques = async () => { try { const response = await apiClient.get('/phases/critiques'); return response.data; } catch (err) { console.error('Erreur lors du chargement des phases critiques:', err); throw err; } }; const createPhase = async (phase: Partial) => { try { const response = await apiClient.post('/phases', phase); await fetchPhases(); return response.data; } catch (err) { console.error('Erreur lors de la création de la phase:', err); throw err; } }; const updatePhase = async (id: string, phase: Partial) => { try { const response = await apiClient.put(`/phases/${id}`, phase); await fetchPhases(); return response.data; } catch (err) { console.error('Erreur lors de la mise à jour de la phase:', err); throw err; } }; const demarrerPhase = async (id: string) => { try { const response = await apiClient.post(`/phases/${id}/demarrer`); await fetchPhases(); return response.data; } catch (err) { console.error('Erreur lors du démarrage de la phase:', err); throw err; } }; const terminerPhase = async (id: string) => { try { const response = await apiClient.post(`/phases/${id}/terminer`); await fetchPhases(); return response.data; } catch (err) { console.error('Erreur lors de la terminaison de la phase:', err); throw err; } }; const suspendrePhase = async (id: string, motif: string) => { try { const response = await apiClient.post(`/phases/${id}/suspendre`, { motif }); await fetchPhases(); return response.data; } catch (err) { console.error('Erreur lors de la suspension de la phase:', err); throw err; } }; const reprendrePhase = async (id: string) => { try { const response = await apiClient.post(`/phases/${id}/reprendre`); await fetchPhases(); return response.data; } catch (err) { console.error('Erreur lors de la reprise de la phase:', err); throw err; } }; const updateAvancement = async (id: string, pourcentage: number) => { try { const response = await apiClient.post(`/phases/${id}/avancement`, { pourcentage }); await fetchPhases(); return response.data; } catch (err) { console.error('Erreur lors de la mise à jour de l\'avancement:', err); throw err; } }; const deletePhase = async (id: string) => { try { await apiClient.delete(`/phases/${id}`); await fetchPhases(); } catch (err) { console.error('Erreur lors de la suppression de la phase:', err); throw err; } }; useEffect(() => { fetchPhases(); }, []); return { phases, loading, error, refresh: fetchPhases, getPhasesByChantier, getPhasesByStatut, getPhasesEnRetard, getPhasesCritiques, createPhase, updatePhase, demarrerPhase, terminerPhase, suspendrePhase, reprendrePhase, updateAvancement, deletePhase }; };