<?php
session_start();

if (!isset($_SESSION["user_id"])) {
    echo json_encode(["error" => "Acceso denegado"]);
    exit;
}

$conexion = new mysqli("localhost", "root", "", "sistec");

if ($conexion->connect_error) {
    die("Error de conexi¨®n: " . $conexion->connect_error);
}

// Recibir datos del formulario
$user_id = $_SESSION["user_id"];
$trabajo_id_hidden = isset($_POST["trabajo_id_hidden"]) ? $_POST["trabajo_id_hidden"] : NULL;
$cliente = $_POST["cliente"];
$dni = $_POST["dni"];
$direccion = $_POST["direccion"];
$cto = $_POST["cto"];
$tipo_servicio = $_POST["tipo_servicio"];
$serie_nueva = $_POST["serie_nueva"] ?? NULL;
$serie_baja = $_POST["serie_baja"] ?? NULL;

// Validar valores de metraje
$metraje_inicio = isset($_POST["metraje_inicio"]) && is_numeric($_POST["metraje_inicio"]) ? $_POST["metraje_inicio"] : NULL;
$metraje_termino = isset($_POST["metraje_termino"]) && is_numeric($_POST["metraje_termino"]) ? $_POST["metraje_termino"] : NULL;

$comentario = $_POST["comentario"];
$n_boleta = $_POST["n_boleta"];
$herramientas = isset($_POST["herramientas"]) ? json_decode($_POST["herramientas"], true) : [];

// Manejo de archivo de boleta
$ruta_boleta = "";
if (!empty($_FILES["foto_boleta"]["name"])) {
    $ruta_boleta = "uploads/" . basename($_FILES["foto_boleta"]["name"]);
    move_uploaded_file($_FILES["foto_boleta"]["tmp_name"], $ruta_boleta);
}

// Iniciar transacci¨®n
$conexion->begin_transaction();

try {
    // Insertar en trabajos_formulario
    $sql = "INSERT INTO trabajos_formulario 
            (trabajo_id_hidden, user_id, cliente, dni, direccion, cto, tipo_servicio, serie_nueva, serie_baja, metraje_inicio, metraje_termino, comentario, n_boleta, foto_boleta) 
            VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";

    $stmt = $conexion->prepare($sql);
    $stmt->bind_param("iissssssssisss", $trabajo_id_hidden, $user_id, $cliente, $dni, $direccion, $cto, $tipo_servicio, $serie_nueva, $serie_baja, $metraje_inicio, $metraje_termino, $comentario, $n_boleta, $ruta_boleta);
    
    if (!$stmt->execute()) {
        throw new Exception("Error al guardar trabajo: " . $stmt->error);
    }

    $trabajo_id = $stmt->insert_id;

    // Actualizar estado de serie_nueva si existe
    if (!empty($serie_nueva)) {
        $stmtSerie = $conexion->prepare("UPDATE series SET estado = 'Usado' WHERE serie = ?");
        $stmtSerie->bind_param("s", $serie_nueva);
        if (!$stmtSerie->execute()) {
            throw new Exception("Error al actualizar la serie: " . $stmtSerie->error);
        } else {
            // Mostrar mensaje de ¨¦xito en el navegador
            echo "<p>Serie " . htmlspecialchars($serie_nueva) . " actualizada a 'Usado'.</p>";
        }
    }

    // Actualizar estado de trabajo a "Terminado"
    if (!empty($trabajo_id_hidden)) {
        $stmtTrabajo = $conexion->prepare("UPDATE trabajos SET estado = 'Terminado' WHERE valida_cod_pedido = ?");
        $stmtTrabajo->bind_param("i", $trabajo_id_hidden);
        if (!$stmtTrabajo->execute()) {
            throw new Exception("Error al actualizar el estado del trabajo: " . $stmtTrabajo->error);
        } else {
            // Mostrar mensaje de ¨¦xito en el navegador
            echo "<p>Trabajo con ID " . htmlspecialchars($trabajo_id_hidden) . " actualizado a 'Terminado'.</p>";
        }
    }

    // Insertar herramientas si existen
    if (!empty($herramientas)) {
        $stmt_h = $conexion->prepare("INSERT INTO herramientas (trabajo_id, herramienta, cantidad) VALUES (?, ?, ?)");
        foreach ($herramientas as $h) {
            $stmt_h->bind_param("isi", $trabajo_id, $h["nombre"], $h["cantidad"]);
            if (!$stmt_h->execute()) {
                throw new Exception("Error al insertar herramientas: " . $stmt_h->error);
            }
        }
    }

    // Confirmar transacci¨®n
    $conexion->commit();
    // Mostrar mensaje final de ¨¦xito en el navegador
    echo "<p>Transacci¨®n completada con ¨¦xito. Trabajo guardado correctamente.</p>";

} catch (Exception $e) {
    // Revertir cambios en caso de error
    $conexion->rollback();
    // Mostrar mensaje de error en el navegador
    echo "<p>Error durante la transacci¨®n: " . htmlspecialchars($e->getMessage()) . "</p>";
}

$conexion->close();
?>
