<?php
require_once 'includes/auth.php';
require_once 'config/database.php';
require_once 'includes/functions.php';

$fiche_id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
$action = $_GET['action'] ?? 'soft'; // soft, restore, definitive
$return_to = $_GET['return_to'] ?? 'sous_dossier'; // où rediriger après l'action

if (!$fiche_id) {
    $_SESSION['error'] = "Fiche introuvable.";
    header('Location: dashboard.php');
    exit;
}

$pdo = getPDO();

// Récupérer les infos de la fiche
$stmt = $pdo->prepare("SELECT sous_dossier_id, createur_id, deleted_at FROM fiches WHERE id = ?");
$stmt->execute([$fiche_id]);
$fiche = $stmt->fetch();

if (!$fiche) {
    $_SESSION['error'] = "Fiche introuvable.";
    header('Location: dashboard.php');
    exit;
}

$sous_dossier_id = $fiche['sous_dossier_id'];
$peut_modifier = ($_SESSION['user_role'] === 'superadmin' || $_SESSION['user_role'] === 'admin' || $_SESSION['user_id'] == $fiche['createur_id']);

// Fonction pour déterminer la redirection
function getRedirectUrl($return_to, $sous_dossier_id, $show_deleted = false) {
    if ($return_to === 'recapitulatif') {
        // Il faudrait connaître le projet_id – on peut le récupérer via la fiche, mais par simplicité on redirige vers le dashboard
        return 'dashboard.php';
    } elseif ($return_to === 'corbeille') {
        return 'corbeille.php';
    } else {
        // par défaut : sous_dossier.php
        $url = "sous_dossier.php?id=$sous_dossier_id";
        if ($show_deleted) $url .= "&deleted=1";
        return $url;
    }
}

// --- Soft delete (corbeille) ---
if ($action === 'soft') {
    if (!$peut_modifier) {
        $_SESSION['error'] = "Vous n'avez pas les droits pour supprimer cette fiche.";
        header("Location: " . getRedirectUrl($return_to, $sous_dossier_id));
        exit;
    }
    try {
        $stmt = $pdo->prepare("UPDATE fiches SET deleted_at = NOW(), deleted_by = ? WHERE id = ?");
        $stmt->execute([$_SESSION['user_id'], $fiche_id]);
        logAction($pdo, $_SESSION['user_id'], 'soft_delete_fiche', "Fiche $fiche_id déplacée vers corbeille");
        $_SESSION['success'] = "Fiche déplacée vers la corbeille.";
    } catch (Exception $e) {
        $_SESSION['error'] = "Erreur : " . $e->getMessage();
    }
    header("Location: " . getRedirectUrl($return_to, $sous_dossier_id));
    exit;
}

// --- Restauration (admin ou superadmin) ---
if ($action === 'restore') {
    if (!in_array($_SESSION['user_role'], ['superadmin','admin'])) {
        $_SESSION['error'] = "Seul l'administrateur peut restaurer une fiche.";
        header("Location: " . getRedirectUrl($return_to, $sous_dossier_id, true));
        exit;
    }
    try {
        $stmt = $pdo->prepare("UPDATE fiches SET deleted_at = NULL, deleted_by = NULL WHERE id = ?");
        $stmt->execute([$fiche_id]);
        logAction($pdo, $_SESSION['user_id'], 'restore_fiche', "Fiche $fiche_id restaurée");
        $_SESSION['success'] = "Fiche restaurée.";
    } catch (Exception $e) {
        $_SESSION['error'] = "Erreur : " . $e->getMessage();
    }
    header("Location: " . getRedirectUrl($return_to, $sous_dossier_id));
    exit;
}
// Supprimer les photos associées
$stmt = $pdo->prepare("SELECT photos FROM fiches WHERE id = ?");
$stmt->execute([$fiche_id]);
$photos = json_decode($stmt->fetchColumn(), true);
if (!empty($photos)) {
    foreach ($photos as $photo) {
        if (file_exists($photo)) unlink($photo);
    }
}
// --- Suppression définitive (admin ou superadmin) ---
if ($action === 'definitive') {
    if (!in_array($_SESSION['user_role'], ['superadmin','admin'])) {
        $_SESSION['error'] = "Seul l'administrateur peut supprimer définitivement une fiche.";
        header("Location: " . getRedirectUrl($return_to, $sous_dossier_id, true));
        exit;
    }
    try {
        // Supprimer le fichier PDF associé
        $stmt = $pdo->prepare("SELECT pdf_path FROM fiches WHERE id = ?");
        $stmt->execute([$fiche_id]);
        $pdf = $stmt->fetchColumn();
        if ($pdf && file_exists($pdf)) unlink($pdf);

        // Supprimer la fiche (les contraintes CASCADE feront le reste)
        $stmt = $pdo->prepare("DELETE FROM fiches WHERE id = ?");
        $stmt->execute([$fiche_id]);

        logAction($pdo, $_SESSION['user_id'], 'definitive_delete_fiche', "Fiche $fiche_id supprimée définitivement");
        $_SESSION['success'] = "Fiche supprimée définitivement.";
    } catch (Exception $e) {
        $_SESSION['error'] = "Erreur : " . $e->getMessage();
    }
    header("Location: " . getRedirectUrl($return_to, $sous_dossier_id, true));
    exit;
}

// Si action inconnue
header('Location: dashboard.php');
exit;