import React, { useState, useEffect } from 'react';
import { api } from '../stores/api';
import PageHeader from '../components/PageHeader';
import SuccessCheck from '../components/SuccessCheck';
export default function RedigerPV() {
const [reunions, setReunions] = useState([]);
const [pvList, setPvList] = useState([]);
const [propositions, setPropositions] = useState([]);
const [reunionId, setReunionId] = useState('');
const [contenu, setContenu] = useState('');
const [decisions, setDecisions] = useState([]);
const [loading, setLoading] = useState(true);
const [success, setSuccess] = useState(false);
const [viewPv, setViewPv] = useState(null);
const [error, setError] = useState('');
useEffect(() => {
Promise.all([
api.get('/presences/reunions'),
api.get('/pv/'),
api.get('/propositions/?statut=secondee'),
]).then(([r, p, props]) => {
setReunions(r);
setPvList(p);
setPropositions(props);
setLoading(false);
}).catch(() => setLoading(false));
}, []);
// Auto-renseigner les décisions depuis les propositions secondées
const chargerPropositions = () => {
if (propositions.length === 0) return;
const decisionsAuto = propositions.map((p) => ({
sujet: p.sujet,
decision: p.description || '',
proposeur: p.proposeur_prenom,
secondeur: p.secondeur_prenom || '',
statut: 'en_attente',
proposition_id: p.id,
}));
setDecisions((prev) => {
// Ne pas dupliquer les propositions déjà ajoutées
const existants = new Set(prev.map((d) => d.proposition_id).filter(Boolean));
const nouvelles = decisionsAuto.filter((d) => !existants.has(d.proposition_id));
return [...prev, ...nouvelles];
});
};
const ajouterDecision = () => {
setDecisions([...decisions, { sujet: '', decision: '', proposeur: '', secondeur: '', statut: 'en_attente' }]);
};
const updateDecision = (idx, field, value) => {
const copy = [...decisions];
copy[idx][field] = value;
setDecisions(copy);
};
const supprimerDecision = (idx) => {
setDecisions(decisions.filter((_, i) => i !== idx));
};
const handleSubmit = async () => {
if (!reunionId) { setError("Sélectionnez une réunion d'affaires"); return; }
if (!contenu.trim()) { setError('Le contenu du PV est obligatoire'); return; }
setError('');
try {
const validDecisions = decisions.filter((d) => d.sujet.trim());
await api.post('/pv/', {
reunion_id: reunionId,
contenu: contenu.trim(),
decisions: validDecisions.length > 0 ? validDecisions : null,
});
setSuccess(true);
} catch (e) { setError(e.message); }
};
if (success) return
{viewPv.date_reunion ? new Date(viewPv.date_reunion).toLocaleDateString('fr-CA') : ''}
Rédigé par {viewPv.redacteur_prenom}
{viewPv.approuve && ( Approuvé )}{d.sujet}
{d.decision}
{d.proposeur && `Proposé par ${d.proposeur}`} {d.secondeur && `, secondé par ${d.secondeur}`}
Aucune décision.
{propositions.length > 0 && ({propositions.length} proposition{propositions.length > 1 ? 's' : ''} secondée{propositions.length > 1 ? 's' : ''} à traiter — cliquez « Importer propositions ».
)}{error}
}