<?php
declare(strict_types=1);
require_once __DIR__ . "/config/database.php";
require_once __DIR__ . "/includes/auth.php";
require_once __DIR__ . "/includes/helpers.php";
requireAuth();
requireRole(["admin"]);

$editId = (int) ($_GET["edit"] ?? 0);
$editUser = null;
if ($editId > 0) {
    $stmt = $pdo->prepare("SELECT id, nom, email, role FROM utilisateurs WHERE id = :id");
    $stmt->execute(["id" => $editId]);
    $editUser = $stmt->fetch();
}

if ($_SERVER["REQUEST_METHOD"] === "POST") {
    $action = $_POST["action"] ?? "create";
    $nom = normalize($_POST["nom"] ?? "");
    $email = normalize($_POST["email"] ?? "");
    $motDePasse = $_POST["mot_de_passe"] ?? "";
    $role = $_POST["role"] ?? "secretaire";
    if ($action === "create") {
        if ($nom !== "" && $email !== "" && $motDePasse !== "") {
            $stmt = $pdo->prepare("INSERT INTO utilisateurs (nom, email, mot_de_passe, role) VALUES (:nom, :email, :mot_de_passe, :role)");
            $stmt->execute([
                "nom" => $nom,
                "email" => $email,
                "mot_de_passe" => password_hash($motDePasse, PASSWORD_DEFAULT),
                "role" => $role,
            ]);
            setFlash("success", "Utilisateur cree.");
        } else {
            setFlash("error", "Nom, email et mot de passe sont obligatoires pour creer un utilisateur.");
        }
    }

    if ($action === "update") {
        $id = (int) ($_POST["id"] ?? 0);
        if ($id > 0 && $nom !== "" && $email !== "") {
            if ($motDePasse !== "") {
                $stmt = $pdo->prepare("UPDATE utilisateurs SET nom = :nom, email = :email, mot_de_passe = :mot_de_passe, role = :role WHERE id = :id");
                $stmt->execute([
                    "nom" => $nom,
                    "email" => $email,
                    "mot_de_passe" => password_hash($motDePasse, PASSWORD_DEFAULT),
                    "role" => $role,
                    "id" => $id,
                ]);
            } else {
                $stmt = $pdo->prepare("UPDATE utilisateurs SET nom = :nom, email = :email, role = :role WHERE id = :id");
                $stmt->execute([
                    "nom" => $nom,
                    "email" => $email,
                    "role" => $role,
                    "id" => $id,
                ]);
            }
            setFlash("success", "Utilisateur modifie.");
        } else {
            setFlash("error", "Nom et email sont obligatoires pour modifier un utilisateur.");
        }
    }

    redirect("/PIS/utilisateurs.php");
}

if (isset($_GET["delete"])) {
    $id = (int) $_GET["delete"];
    if ($id !== (int) $_SESSION["user_id"]) {
        $stmt = $pdo->prepare("DELETE FROM utilisateurs WHERE id=:id");
        $stmt->execute(["id" => $id]);
        setFlash("success", "Utilisateur supprime.");
    } else {
        setFlash("error", "Vous ne pouvez pas supprimer votre propre compte.");
    }
    redirect("/PIS/utilisateurs.php");
}

$users = $pdo->query("SELECT id, nom, email, role, created_at FROM utilisateurs ORDER BY id DESC")->fetchAll();
require_once __DIR__ . "/includes/header.php";
?>
<h2>Gestion des utilisateurs</h2>
<form method="POST">
    <input type="hidden" name="action" value="<?= $editUser ? 'update' : 'create' ?>">
    <?php if ($editUser): ?>
        <input type="hidden" name="id" value="<?= (int) $editUser['id'] ?>">
    <?php endif; ?>
    <input type="text" name="nom" placeholder="Nom complet" required value="<?= htmlspecialchars((string) ($editUser['nom'] ?? '')) ?>">
    <input type="email" name="email" placeholder="Email" required value="<?= htmlspecialchars((string) ($editUser['email'] ?? '')) ?>">
    <input type="password" name="mot_de_passe" placeholder="<?= $editUser ? 'Laisser vide pour conserver le mot de passe' : 'Mot de passe' ?>" <?= $editUser ? '' : 'required' ?> >
    <select name="role" required>
        <option value="admin" <?= ($editUser['role'] ?? '') === 'admin' ? 'selected' : '' ?>>Admin</option>
        <option value="secretaire" <?= ($editUser['role'] ?? '') === 'secretaire' ? 'selected' : '' ?>>Secretaire</option>
        <option value="utilisateur" <?= ($editUser['role'] ?? '') === 'utilisateur' ? 'selected' : '' ?>>Utilisateur</option>
    </select>
    <button type="submit"><?= $editUser ? 'Mettre a jour' : 'Ajouter' ?></button>
    <?php if ($editUser): ?>
        <a class="button-secondary" href="/PIS/utilisateurs.php">Annuler</a>
    <?php endif; ?>
</form>
<div class="table-wrap">
<table>
    <thead>
    <tr><th>Nom</th><th>Email</th><th>Role</th><th>Cree le</th><th>Action</th></tr>
    </thead>
    <tbody>
    <?php foreach ($users as $u): ?>
        <tr>
            <td><?= htmlspecialchars($u["nom"]) ?></td>
            <td><?= htmlspecialchars($u["email"]) ?></td>
            <td><?= htmlspecialchars($u["role"]) ?></td>
            <td><?= htmlspecialchars($u["created_at"]) ?></td>
            <td class="actions">
                <a href="/PIS/utilisateurs.php?edit=<?= (int) $u["id"] ?>">Modifier</a>
                <a class="btn-danger" href="/PIS/utilisateurs.php?delete=<?= (int) $u["id"] ?>" onclick="return confirm('Supprimer cet utilisateur ?')">Supprimer</a>
            </td>
        </tr>
    <?php endforeach; ?>
    </tbody>
</table>
</div>
<?php require_once __DIR__ . "/includes/footer.php"; ?>
