<?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 VEHÍCULOS --------------------
    if ($action === 'list') {
        $res = $mysqli->query("SELECT * FROM autos ORDER BY id_unidad DESC");
        $data = [];
        while ($row = $res->fetch_assoc()) {
            $row['dias_circula_array'] = $row['dias_circula'] ? array_map('intval', explode(',', $row['dias_circula'])) : [];
            $data[] = $row;
        }
        echo json_encode($data);
        exit;
    }

    // -------------------- GUARDAR VEHÍCULO --------------------
    if ($action === 'save') {
        $id = $_POST['id'] ?? null;
        $placa = strtoupper(trim($_POST['placa'] ?? ''));
        $tipoPrincipal = $_POST['tipoPrincipal'] ?? '';
        $subtipo = $_POST['subtipo'] ?? '';
        $marca = $_POST['marca'] ?? '';
        $modelo = $_POST['modelo'] ?? '';
        $anio = !empty($_POST['anio']) ? (int)$_POST['anio'] : null;
        $color = $_POST['color'] ?? '';
        $combustible = $_POST['combustible'] ?? '';
        $capacidad = !empty($_POST['capacidad']) ? (float)$_POST['capacidad'] : 0.00;
        $pasajeros = !empty($_POST['pasajeros']) ? (int)$_POST['pasajeros'] : 0;
        $comentarios = $_POST['comentarios'] ?? 'Sin comentarios';
        $engomado = $_POST['engomado'] ?? '';
        $fech_exp = !empty($_POST['fecha_exp']) ? $_POST['fecha_exp'] : null;
        $fech_vig = !empty($_POST['fecha_vig']) ? $_POST['fecha_vig'] : null;

        $titular = $_POST['Nserie'] ?? '';
        $NIV = $_POST['NombreT'] ?? '';

        // -------------------- DÍAS QUE NO CIRCULA --------------------
        $diasSemana = ["lunes" => 1, "martes" => 2, "miercoles" => 3, "jueves" => 4, "viernes" => 5, "sabado" => 6, "domingo" => 7];
        $seleccionados = $_POST['dias'] ?? null;

        if ($seleccionados === null) {
            // Si no se envió nada (ej. al editar sin tocar los checkboxes),
            // mantener el valor anterior de la base de datos
            $idTemp = $_POST['id'] ?? 0;
            if ($idTemp) {
                $res = $mysqli->query("SELECT dias_circula FROM autos WHERE id_unidad = $idTemp");
                $row = $res->fetch_assoc();
                $dias_circula = $row['dias_circula'];
            } else {
                $dias_circula = "";
            }
        } else {
            // Recalcular los días que no circula
            $noSeleccionados = [];
            foreach ($diasSemana as $dia => $num) {
                if (!in_array($dia, $seleccionados)) $noSeleccionados[] = $num;
            }
            $dias_circula = implode(",", $noSeleccionados);
        }

        // -------------------- CHECKBOX TALONES --------------------
        if ($id) {
            // Si es edición, obtenemos los valores actuales
            $resCheck = $mysqli->query("SELECT no_verifico1, no_verifico2 FROM autos WHERE id_unidad = $id");
            $prev = $resCheck->fetch_assoc();
        }

        $no_verifico1 = isset($_POST['no_verifico1']) ? 'si' : ($id ? $prev['no_verifico1'] : '');
        $no_verifico2 = isset($_POST['no_verifico2']) ? 'si' : ($id ? $prev['no_verifico2'] : '');


        // -------------------- SUBIDA DE ARCHIVOS --------------------
        $uploadVehiculo = __DIR__ . '/imagenes_vehiculos/';
        $uploadTalon = __DIR__ . '/imagen_talon/';

        if (!is_dir($uploadVehiculo)) mkdir($uploadVehiculo, 0755, true);
        if (!is_dir($uploadTalon)) mkdir($uploadTalon, 0755, true);

        $archivosNombres = ['imagen' => null, 'talon1' => null, 'talon2' => null];

        // Subir imagen del vehículo
        if (isset($_FILES['imagen']) && $_FILES['imagen']['error'] === UPLOAD_ERR_OK) {
            $ext = pathinfo($_FILES['imagen']['name'], PATHINFO_EXTENSION);
            $nombreFinal = uniqid() . '.' . $ext;
            move_uploaded_file($_FILES['imagen']['tmp_name'], $uploadVehiculo . $nombreFinal);
            $archivosNombres['imagen'] = $nombreFinal;
        }

        // Subir talones
        foreach (['talon1', 'talon2'] as $file) {
            if (isset($_FILES[$file]) && $_FILES[$file]['error'] === UPLOAD_ERR_OK) {
                $ext = pathinfo($_FILES[$file]['name'], PATHINFO_EXTENSION);
                $nombreFinal = uniqid() . '.' . $ext;
                move_uploaded_file($_FILES[$file]['tmp_name'], $uploadTalon . $nombreFinal);
                $archivosNombres[$file] = $nombreFinal;
            }
        }

        // Si es actualización, mantener archivos existentes
        if ($id) {
            $res = $mysqli->query("SELECT imagen, talon1, talon2 FROM autos WHERE id_unidad = $id");
            $old = $res->fetch_assoc();

            if (!$archivosNombres['imagen']) $archivosNombres['imagen'] = $old['imagen'];
            if (!$archivosNombres['talon1']) $archivosNombres['talon1'] = $old['talon1'];
            if (!$archivosNombres['talon2']) $archivosNombres['talon2'] = $old['talon2'];
        }

        // -------------------- UPDATE --------------------
        if ($id) {
            $sql = "UPDATE autos SET
                placa=?, tipo_principal=?, subtipo=?, marca=?, modelo=?, anio=?, color=?, tipo_combustible=?,
                capacidad_peso=?, pasajeros=?, comentarios=?, dias_circula=?, engomado=?, fecha_exp=?, fecha_vig=?,
                Nserie=?, NombreT=?, no_verifico1=?, no_verifico2=?, imagen=?, talon1=?, talon2=?
                WHERE id_unidad=?";

            $params = [
                $placa,
                $tipoPrincipal,
                $subtipo,
                $marca,
                $modelo,
                $anio,
                $color,
                $combustible,
                $capacidad,
                $pasajeros,
                $comentarios,
                $dias_circula,
                $engomado,
                $fech_exp,
                $fech_vig,
                $titular,
                $NIV,
                $no_verifico1,
                $no_verifico2,
                $archivosNombres['imagen'],
                $archivosNombres['talon1'],
                $archivosNombres['talon2'],
                $id
            ];

            // s=string, i=int, d=decimal
            $tipos = "ssssssssdissssssssssssi";

            $stmt = $mysqli->prepare($sql);
            if (!$stmt) {
                echo json_encode(["success" => false, "message" => "Error prepare: " . $mysqli->error]);
                exit;
            }
            $stmt->bind_param($tipos, ...$params);
            $ok = $stmt->execute();
        } else {
            // -------------------- INSERT --------------------
            $sql = "INSERT INTO autos (
                placa, tipo_principal, subtipo, marca, modelo, anio, color, tipo_combustible,
                capacidad_peso, pasajeros, comentarios, dias_circula, engomado,
                no_verifico1, no_verifico2, imagen, talon1, talon2,
                fecha_exp, fecha_vig, Nserie, NombreT
            ) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";

            $params = [
                $placa,
                $tipoPrincipal,
                $subtipo,
                $marca,
                $modelo,
                $anio,
                $color,
                $combustible,
                $capacidad,
                $pasajeros,
                $comentarios,
                $dias_circula,
                $engomado,
                $no_verifico1,
                $no_verifico2,
                $archivosNombres['imagen'],
                $archivosNombres['talon1'],
                $archivosNombres['talon2'],
                $fech_exp,
                $fech_vig,
                $titular,
                $NIV
            ];

            $tipos = "ssssssssdissssssssssss";

            $stmt = $mysqli->prepare($sql);
            if (!$stmt) {
                echo json_encode(["success" => false, "message" => "Error prepare: " . $mysqli->error]);
                exit;
            }
            $stmt->bind_param($tipos, ...$params);
            $ok = $stmt->execute();
        }

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

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

        // 1️⃣ Obtener nombres de archivos
        $res = $mysqli->query("SELECT imagen, talon1, talon2 FROM autos WHERE id_unidad = $id");
        $row = $res->fetch_assoc();

        // 2️⃣ Borrar archivos físicos si existen
        $paths = [
            __DIR__ . '/imagenes_vehiculos/' . $row['imagen'],
            __DIR__ . '/imagen_talon/' . $row['talon1'],
            __DIR__ . '/imagen_talon/' . $row['talon2'],
        ];

        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 autos WHERE id_unidad=?");
        $stmt->bind_param("i", $id);
        $ok = $stmt->execute();

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


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