<?php
header('Content-Type: application/json; charset=utf-8');

try {
    $mysqli = new mysqli("localhost", "root", "root", "rastreo");
    if ($mysqli->connect_errno) {
        throw new Exception("Error DB: " . $mysqli->connect_error);
    }

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

    // -------------------- LISTAR TODOS --------------------
    if ($action === 'list') {
        $res = $mysqli->query("SELECT * FROM repartidores ORDER BY id DESC");
        $data = [];
        while ($row = $res->fetch_assoc()) {
            $data[] = $row;
        }
        echo json_encode(["success" => true, "data" => $data]);
        exit;
    }

    // -------------------- OBTENER UNO --------------------
    if ($action === 'get') {
        $id = intval($_GET['id'] ?? 0);
        $stmt = $mysqli->prepare("SELECT * FROM repartidores WHERE id=?");
        $stmt->bind_param("i", $id);
        $stmt->execute();
        $res = $stmt->get_result()->fetch_assoc();

        echo json_encode([
            "success" => $res ? true : false,
            "data"    => $res,
            "message" => $res ? "Registro encontrado" : "No se encontró el registro"
        ]);
        exit;
    }

    // -------------------- ELIMINAR --------------------
    if ($action === 'delete') {
        $id = intval($_POST['id'] ?? 0);

        // 1️⃣ Obtener nombres de archivos
        $res = $mysqli->query("SELECT foto_licencia, foto_repartidor FROM repartidores WHERE id = $id");
        $row = $res->fetch_assoc();

        if ($row) {
            // 2️⃣ Borrar archivos físicos si existen
            $paths = [
                __DIR__ . '/' . $row['foto_licencia'],
                __DIR__ . '/' . $row['foto_repartidor']
            ];

            foreach ($paths as $file) {
                if ($file && file_exists($file)) {
                    @unlink($file); // el @ evita errores si no se puede borrar
                }
            }

            // 3️⃣ Eliminar registro de la base de datos
            $stmt = $mysqli->prepare("DELETE FROM repartidores WHERE id=?");
            $stmt->bind_param("i", $id);
            $ok = $stmt->execute();

            echo json_encode([
                "success" => $ok,
                "message" => $ok ? "Eliminado correctamente" : $stmt->error
            ]);
            exit;
        } else {
            echo json_encode([
                "success" => false,
                "message" => "Registro no encontrado"
            ]);
            exit;
        }
    }

    // -------------------- GUARDAR (nuevo o editar) --------------------
    if ($action === 'save') {

        $id                = $_POST['id'] ?? null;
        $traker_id         = $_POST['traker_id'] ?? null;
        $nombre            = $_POST['nombre'] ?? '';
        $telefono          = $_POST['telefono'] ?? '';
        $correo            = $_POST['correo'] ?? '';
        $edad              = $_POST['edad'] ?? null;
        $curp              = $_POST['curp'] ?? '';
        $direccion         = $_POST['direccion'] ?? '';
        $numero_emergencia = $_POST['numero_emergencia'] ?? '';
        $estatus           = $_POST['estatus'] ?? 'activo';
        $comentarios       = $_POST['comentarios'] ?? '';
        $fecha_nacimiento  = $_POST['fecha_nacimiento'] ?: null;

        // Si hay ID => es edición: obtenemos el registro actual
        if ($id) {
            $res = $mysqli->query("SELECT * FROM repartidores WHERE id = " . intval($id));
            $actual = $res->fetch_assoc();

            if (!$actual) {
                echo json_encode(["success" => false, "message" => "Registro no encontrado"]);
                exit;
            }

            // Mantener valores actuales
            $fotoLicencia   = $actual['foto_licencia'];
            $fotoRepartidor = $actual['foto_repartidor'];
        } else {
            // Modo nuevo
            $fotoLicencia = null;
            $fotoRepartidor = null;
        }

        // ✅ Subida de nueva imagen licencia
        if (!empty($_FILES['foto_licencia']['name'])) {
            $nombreArchivo = time() . "_" . basename($_FILES['foto_licencia']['name']);
            $rutaDestino = __DIR__ . "/licencias/" . $nombreArchivo;

            if (!is_dir(__DIR__ . "/licencias/")) mkdir(__DIR__ . "/licencias/", 0755, true);

            if (move_uploaded_file($_FILES['foto_licencia']['tmp_name'], $rutaDestino)) {
                $fotoLicencia = "licencias/" . $nombreArchivo;
            }
        }

        // ✅ Subida de nueva foto repartidor
        if (!empty($_FILES['imagen']['name'])) {
            $nombreArchivo = time() . "_" . basename($_FILES['imagen']['name']);
            $rutaDestino = __DIR__ . "/repartidores/" . $nombreArchivo;

            if (!is_dir(__DIR__ . "/repartidores/")) mkdir(__DIR__ . "/repartidores/", 0755, true);

            if (move_uploaded_file($_FILES['imagen']['tmp_name'], $rutaDestino)) {
                $fotoRepartidor = "repartidores/" . $nombreArchivo;
            }
        }

        // ✅ MODO EDITAR
        if ($id) {
            $sql = "UPDATE repartidores SET 
traker_id=?, nombre=?, telefono=?, correo=?, edad=?, curp=?, direccion=?, 
numero_emergencia=?, fecha_nacimiento=?, estatus=?, comentarios=?";

            $paramTypes = "ssssissssss";
            $params = [
                $traker_id,
                $nombre,
                $telefono,
                $correo,
                $edad,
                $curp,
                $direccion,
                $numero_emergencia,
                $fecha_nacimiento,
                $estatus,
                $comentarios
            ];

            if (!empty($_FILES['foto_licencia']['name'])) {
                $sql .= ", foto_licencia=?";
                $paramTypes .= "s";
                $params[] = $fotoLicencia;
            }

            if (!empty($_FILES['imagen']['name'])) {
                $sql .= ", foto_repartidor=?";
                $paramTypes .= "s";
                $params[] = $fotoRepartidor;
            }

            $sql .= " WHERE id=?";
            $paramTypes .= "i";
            $params[] = $id;

            $stmt = $mysqli->prepare($sql);
            $stmt->bind_param($paramTypes, ...$params);
            $ok = $stmt->execute();

            echo json_encode([
                "success" => $ok,
                "message" => $ok ? "Actualizado correctamente" : $stmt->error
            ]);
            exit;
        }

        // ✅ MODO NUEVO
        $stmt = $mysqli->prepare("INSERT INTO repartidores 
        (traker_id, nombre, telefono, correo, edad, curp, direccion, 
         numero_emergencia, fecha_nacimiento, estatus, comentarios,
         foto_licencia, foto_repartidor)
        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");

        $stmt->bind_param(
            "ssssissssssss",
            $traker_id,
            $nombre,
            $telefono,
            $correo,
            $edad,
            $curp,
            $direccion,
            $numero_emergencia,
            $fecha_nacimiento,
            $estatus,
            $comentarios,
            $fotoLicencia,
            $fotoRepartidor
        );

        $ok = $stmt->execute();

        echo json_encode([
            "success" => $ok,
            "message" => $ok ? "Guardado correctamente" : $stmt->error
        ]);
        exit;
    }


    // -------------------- ACCIÓN INVÁLIDA --------------------
    echo json_encode(["success" => false, "message" => "Acción inválida"]);
} catch (Exception $e) {
    echo json_encode(["success" => false, "message" => $e->getMessage()]);
}
