<?php
/**
 * API Controller - Localisation Matériel
 * Gère les opérations CRUD sur la table localisation_materiel
 * Connexion directe à la base de données cPanel
 */

header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type, Authorization');

// Gestion préflight CORS
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    http_response_code(200);
    exit;
}

// Configuration de la base de données cPanel
define('DB_HOST', 'localhost');
define('DB_NAME', 'transubd_HSE');
define('DB_USER', 'transubd_transub_user');
define('DB_PASS', 'Tr@nsub2@24');
define('DB_PORT', 3306);

try {
    // Connexion PDO à la base cPanel
    $dsn = "mysql:host=" . DB_HOST . ";port=" . DB_PORT . ";dbname=" . DB_NAME . ";charset=utf8mb4";
    $pdo = new PDO($dsn, DB_USER, DB_PASS, [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::ATTR_EMULATE_PREPARES => false
    ]);
} catch (PDOException $e) {
    http_response_code(500);
    echo json_encode(['success' => false, 'message' => 'Erreur de connexion: ' . $e->getMessage()]);
    exit;
}

$method = $_SERVER['REQUEST_METHOD'];
$input = json_decode(file_get_contents('php://input'), true);

// Récupération de l'ID depuis l'URL
$request_uri = $_SERVER['REQUEST_URI'];
$path_parts = explode('/', trim(parse_url($request_uri, PHP_URL_PATH), '/'));
$id_index = array_search('localisation_materiel.php', $path_parts);
$id = ($id_index !== false && isset($path_parts[$id_index + 1])) ? (int)$path_parts[$id_index + 1] : null;

try {
    switch ($method) {
        case 'GET':
            if ($id) {
                getLocalisation($pdo, $id);
            } else {
                getLocalisations($pdo);
            }
            break;
        case 'POST':
            createLocalisation($pdo, $input);
            break;
        case 'PUT':
            if ($id) {
                updateLocalisation($pdo, $id, $input);
            } else {
                http_response_code(400);
                echo json_encode(['success' => false, 'message' => 'ID requis pour la modification']);
            }
            break;
        case 'DELETE':
            if ($id) {
                deleteLocalisation($pdo, $id);
            } else {
                http_response_code(400);
                echo json_encode(['success' => false, 'message' => 'ID requis pour la suppression']);
            }
            break;
        default:
            http_response_code(405);
            echo json_encode(['success' => false, 'message' => 'Méthode non autorisée']);
    }
} catch (Exception $e) {
    http_response_code(500);
    echo json_encode(['success' => false, 'message' => 'Erreur serveur: ' . $e->getMessage()]);
}

/**
 * Récupère toutes les localisations
 */
function getLocalisations($pdo) {
    $stmt = $pdo->query("SELECT * FROM localisation_materiel ORDER BY site ASC");
    $data = $stmt->fetchAll();
    
    echo json_encode([
        'success' => true,
        'data' => $data,
        'total' => count($data)
    ]);
}

/**
 * Récupère une localisation par son ID
 */
function getLocalisation($pdo, $id) {
    $stmt = $pdo->prepare("SELECT * FROM localisation_materiel WHERE id = ?");
    $stmt->execute([$id]);
    $data = $stmt->fetch();
    
    if ($data) {
        echo json_encode(['success' => true, 'data' => $data]);
    } else {
        http_response_code(404);
        echo json_encode(['success' => false, 'message' => 'Localisation non trouvée']);
    }
}

/**
 * Crée une nouvelle localisation
 */
function createLocalisation($pdo, $input) {
    // Validation des champs obligatoires
    if (empty($input['site']) || empty($input['latitude']) || empty($input['longitude'])) {
        http_response_code(400);
        echo json_encode(['success' => false, 'message' => 'Les champs site, latitude et longitude sont obligatoires']);
        return;
    }

    $stmt = $pdo->prepare("INSERT INTO localisation_materiel (site, longitude, latitude, last_sync, annonce, tel_urgence) 
                           VALUES (?, ?, ?, NOW(), ?, ?)");
    $stmt->execute([
        $input['site'],
        $input['longitude'],
        $input['latitude'],
        $input['annonce'] ?? '',
        $input['tel_urgence'] ?? ''
    ]);

    $newId = $pdo->lastInsertId();

    // Récupérer l'enregistrement créé
    $stmt = $pdo->prepare("SELECT * FROM localisation_materiel WHERE id = ?");
    $stmt->execute([$newId]);
    $data = $stmt->fetch();

    echo json_encode([
        'success' => true,
        'message' => 'Localisation ajoutée avec succès',
        'data' => $data
    ]);
}

/**
 * Met à jour une localisation existante
 */
function updateLocalisation($pdo, $id, $input) {
    // Vérifier que l'enregistrement existe
    $stmt = $pdo->prepare("SELECT id FROM localisation_materiel WHERE id = ?");
    $stmt->execute([$id]);
    if (!$stmt->fetch()) {
        http_response_code(404);
        echo json_encode(['success' => false, 'message' => 'Localisation non trouvée']);
        return;
    }

    $fields = [];
    $params = [];

    if (isset($input['site'])) {
        $fields[] = "site = ?";
        $params[] = $input['site'];
    }
    if (isset($input['longitude'])) {
        $fields[] = "longitude = ?";
        $params[] = $input['longitude'];
    }
    if (isset($input['latitude'])) {
        $fields[] = "latitude = ?";
        $params[] = $input['latitude'];
    }
    if (isset($input['annonce'])) {
        $fields[] = "annonce = ?";
        $params[] = $input['annonce'];
    }
    if (isset($input['tel_urgence'])) {
        $fields[] = "tel_urgence = ?";
        $params[] = $input['tel_urgence'];
    }

    // Mise à jour automatique de last_sync
    $fields[] = "last_sync = NOW()";

    if (empty($fields)) {
        http_response_code(400);
        echo json_encode(['success' => false, 'message' => 'Aucun champ à mettre à jour']);
        return;
    }

    $params[] = $id;
    $sql = "UPDATE localisation_materiel SET " . implode(', ', $fields) . " WHERE id = ?";
    $stmt = $pdo->prepare($sql);
    $stmt->execute($params);

    // Récupérer l'enregistrement mis à jour
    $stmt = $pdo->prepare("SELECT * FROM localisation_materiel WHERE id = ?");
    $stmt->execute([$id]);
    $data = $stmt->fetch();

    echo json_encode([
        'success' => true,
        'message' => 'Localisation mise à jour avec succès',
        'data' => $data
    ]);
}

/**
 * Supprime une localisation
 */
function deleteLocalisation($pdo, $id) {
    $stmt = $pdo->prepare("SELECT id FROM localisation_materiel WHERE id = ?");
    $stmt->execute([$id]);
    if (!$stmt->fetch()) {
        http_response_code(404);
        echo json_encode(['success' => false, 'message' => 'Localisation non trouvée']);
        return;
    }

    $stmt = $pdo->prepare("DELETE FROM localisation_materiel WHERE id = ?");
    $stmt->execute([$id]);

    echo json_encode([
        'success' => true,
        'message' => 'Localisation supprimée avec succès'
    ]);
}