<?php
/**
 * Mini-projet 03 — Gestionnaire de contacts (tableau PHP, pas de BDD)
 * GET ?action=list|search|add|delete
 */
header('Content-Type: application/json; charset=utf-8');

function erreur(string $msg, int $code = 400): never {
    http_response_code($code);
    echo json_encode(['erreur' => $msg]);
    exit;
}

// Contacts en mémoire — en prod ce serait un fichier JSON ou une BDD
$contacts = [
    ['id'=>1, 'nom'=>'Alice Martin',  'email'=>'alice@example.com',  'tel'=>'0601020304'],
    ['id'=>2, 'nom'=>'Bob Dupont',    'email'=>'bob@example.com',    'tel'=>'0602030405'],
    ['id'=>3, 'nom'=>'Charlie Durand','email'=>'charlie@example.com','tel'=>'0603040506'],
    ['id'=>4, 'nom'=>'Diana Lambert', 'email'=>'diana@example.com',  'tel'=>'0604050607'],
];

$action = $_GET['action'] ?? 'list';

match($action) {
    'list' => (function() use ($contacts) {
        echo json_encode(['count' => count($contacts), 'contacts' => $contacts], JSON_PRETTY_PRINT);
    })(),

    'search' => (function() use ($contacts) {
        $q = strtolower(trim($_GET['q'] ?? ''));
        if ($q === '') erreur("Paramètre 'q' requis pour la recherche");
        // Recherche dans nom ET email, insensible à la casse
        $resultats = array_values(array_filter(
            $contacts,
            fn($c) => str_contains(strtolower($c['nom']), $q)
                   || str_contains(strtolower($c['email']), $q)
        ));
        echo json_encode(['query' => $q, 'count' => count($resultats), 'contacts' => $resultats], JSON_PRETTY_PRINT);
    })(),

    'add' => (function() use (&$contacts) {
        $nom   = trim($_GET['nom']   ?? '');
        $email = trim($_GET['email'] ?? '');
        if (!$nom || !$email) erreur("Paramètres 'nom' et 'email' requis");
        // Validation email avec filter_var
        if (!filter_var($email, FILTER_VALIDATE_EMAIL)) erreur("Email invalide : $email");
        // Vérifier l'unicité de l'email
        $emails = array_column($contacts, 'email');
        if (in_array($email, $emails)) erreur("Email déjà utilisé");
        // Générer un id auto-incrémenté
        $maxId = empty($contacts) ? 0 : max(array_column($contacts, 'id'));
        $nouveau = ['id' => $maxId + 1, 'nom' => $nom, 'email' => $email, 'tel' => ''];
        $contacts[] = $nouveau;
        http_response_code(201);
        echo json_encode(['message' => 'Contact ajouté', 'contact' => $nouveau], JSON_PRETTY_PRINT);
    })(),

    'delete' => (function() use (&$contacts) {
        $id = (int)($_GET['id'] ?? 0);
        // array_search() sur les IDs extraits avec array_column()
        $ids = array_column($contacts, 'id');
        $index = array_search($id, $ids);
        if ($index === false) erreur("Contact #$id introuvable", 404);
        $supprime = $contacts[$index];
        array_splice($contacts, $index, 1); // supprime 1 élément à l'index
        echo json_encode(['message' => "Contact #$id supprimé", 'supprime' => $supprime], JSON_PRETTY_PRINT);
    })(),

    default => erreur("Action '$action' inconnue. Actions : list, search, add, delete")
};
