<?php
include("conexion.php");
session_start();
header('Content-Type: application/json');

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $seleccionados = $_POST['seleccionados'] ?? [];
    $proveedor = trim($_POST['proveedor'] ?? '');
    $id_usuario = $_SESSION['id_usuario'] ?? 0;

    if (empty($seleccionados) || empty($proveedor)) {
        echo json_encode(['success' => false, 'message' => 'Debe seleccionar al menos una serie y un proveedor']);
        exit;
    }

    // Obtener empresa del usuario
    $usuario = $conexion->query("SELECT id_empresa FROM usuarios_sistema WHERE id_usuario = $id_usuario")->fetch_assoc();
    $id_empresa = $usuario['id_empresa'] ?? 0;

    $series_validas = [];
    $errores = [];
    $total_seleccionados = 0;
    $validos = 0;
    $no_validos = 0;

    foreach ($seleccionados as $id) {
        $id = intval($id);
        $total_seleccionados++;

        // Verificar si está en series_baja
        $stmt = $conexion->prepare("SELECT estado, id_serie FROM series_baja WHERE id = ?");
        $stmt->bind_param("i", $id);
        $stmt->execute();
        $stmt->bind_result($estado_baja, $id_serie_baja);
        $found_baja = $stmt->fetch();
        $stmt->close();

        if ($found_baja) {
            if ($estado_baja === 'devuelto') {
                // Determinar tipo
                $tipo = is_null($id_serie_baja) ? 'serie_baja' : 'serie';
                $series_validas[] = ['id_serie' => $id, 'tipo_serie' => $tipo];
                $validos++;
            } else {
                $no_validos++;
                $errores[] = "La serie_baja ID $id no está en estado 'devuelto'. Estado actual: $estado_baja";
            }
            continue;
        }

        // Verificar si está en series normales
        $stmt = $conexion->prepare("SELECT estado FROM series WHERE id = ?");
        $stmt->bind_param("i", $id);
        $stmt->execute();
        $stmt->bind_result($estado_normal);
        $found_normal = $stmt->fetch();
        $stmt->close();

        if ($found_normal) {
            if ($estado_normal === 'devuelto') {
                $series_validas[] = ['id_serie' => $id, 'tipo_serie' => 'serie'];
                $validos++;
            } else {
                $no_validos++;
                $errores[] = "La serie ID $id no está en estado 'devuelto'. Estado actual: $estado_normal";
            }
        } else {
            $no_validos++;
            $errores[] = "El ID $id no se encontró ni en series ni en series_baja.";
        }
    }

    // Insertar si hay series válidas
    if ($validos > 0) {
        $stmt_guia = $conexion->prepare("INSERT INTO guias_salida_devolucion (nombre_proveedor, id_usuario, id_empresa, fecha_registro) VALUES (?, ?, ?, NOW())");
        $stmt_guia->bind_param("sii", $proveedor, $id_usuario, $id_empresa);
        $stmt_guia->execute();
        $id_guia = $stmt_guia->insert_id;
        $stmt_guia->close();

        // Insertar en guias_salida_detalle
        $stmt_detalle = $conexion->prepare("INSERT INTO guias_salida_detalle (id_guia, id_serie, tipo_serie) VALUES (?, ?, ?)");

        foreach ($series_validas as $serie) {
            $stmt_detalle->bind_param("iis", $id_guia, $serie['id_serie'], $serie['tipo_serie']);
            $stmt_detalle->execute();

            // Actualizar estado a 'finaliza' si es serie_baja
            if ($serie['tipo_serie'] === 'serie_baja') {
                $update = $conexion->prepare("UPDATE series_baja SET estado = 'finaliza' WHERE id = ?");
                $update->bind_param("i", $serie['id_serie']);
                $update->execute();
                $update->close();
            }
           if ($serie['tipo_serie'] === 'serie') {
                $update = $conexion->prepare("UPDATE series_baja SET estado = 'finaliza' WHERE id = ?");
                $update->bind_param("i", $serie['id_serie']);
                $update->execute();
                $update->close();
            }
        }

        $stmt_detalle->close();

        echo json_encode([
            'success' => true,
            'message' => 'Guía generada correctamente',
            'total_seleccionados' => $total_seleccionados,
            'validos' => $validos,
            'no_validos' => $no_validos,
            'errores' => $errores
        ]);
    } else {
        echo json_encode([
            'success' => false,
            'message' => 'No se seleccionaron series válidas con estado "devuelto".',
            'total_seleccionados' => $total_seleccionados,
            'validos' => $validos,
            'no_validos' => $no_validos,
            'errores' => $errores
        ]);
    }
}
?>
