<?php
include 'conexion.php'; 
// Iniciar sesión si aún no se ha hecho
session_start();

// Verificar si el usuario está logueado y obtener el id_usuario
if (!isset($_SESSION['id_usuario'])) {
    echo json_encode(['status' => 'error', 'mensaje' => 'Usuario no autenticado']);
    exit;
}

// Obtener el id_usuario de la sesión
$id_usuario = $_SESSION['id_usuario'];

// Consultar los detalles del usuario desde la base de datos
$usuario = $conexion->query("SELECT * FROM usuarios_sistema WHERE id_usuario = $id_usuario")->fetch_assoc();

// Obtener el id_empresa del usuario actual
if (!isset($usuario['id_empresa']) || empty($usuario['id_empresa'])) {
    echo json_encode(['status' => 'error', 'mensaje' => 'No se encontró id_empresa en la sesión']);
    exit;
}

$id_empresa_usuario = $usuario['id_empresa'];  // Aquí obtenemos el id_empresa

// Leer el JSON de la entrada
$raw = file_get_contents('php://input');
$input = json_decode($raw, true);

// Verificar si los datos fueron recibidos correctamente
if (!$input || !isset($input['guia']) || !isset($input['productos']) || !isset($input['series'])) {
    echo json_encode(['status' => 'error', 'mensaje' => 'JSON inválido o falta productos, series o datos de guía']);
    exit;
}

// Datos de la guía
$tipo_guia = $input['guia']['tipo_guia'];
$numero_guia = $input['guia']['numero_guia'];
$fecha_guia = $input['guia']['fecha_guia'];
$id_proveedor = intval($input['guia']['id_proveedor']);
$detalle_guia = isset($input['guia']['detalle']) ? $input['guia']['detalle'] : ''; // Optional

// Usar el id_empresa del usuario logueado
$id_empresa = $id_empresa_usuario;  // Se usa el id_empresa del usuario en sesión

if (empty($id_empresa)) {
    echo json_encode(['status' => 'error', 'mensaje' => 'El id_empresa es necesario y no está disponible']);
    exit;
}

// Insertar la guía
$stmt_guia = $conexion->prepare("INSERT INTO guias_ingreso (tipo_guia, numero_guia, fecha_guia, id_proveedor, detalle, id_empresa) 
                                 VALUES (?, ?, ?, ?, ?, ?)");
$stmt_guia->bind_param("sssisi", $tipo_guia, $numero_guia, $fecha_guia, $id_proveedor, $detalle_guia, $id_empresa);
$stmt_guia->execute();
$id_guia = $stmt_guia->insert_id;

$totalInsertados = 0;
$resumen = [];

// Procesar productos
if (isset($input['productos']) && is_array($input['productos'])) {
    foreach ($input['productos'] as $producto) {
        $id_producto = intval($producto['id_producto']);
        $cantidad = intval($producto['cantidad']);

        if ($id_producto > 0 && $cantidad > 0) {
            // Insertar detalle en la guía
            $stmt_det = $conexion->prepare("INSERT INTO detalle_guia_productos (id_guia, id_producto, cantidad) VALUES (?, ?, ?)");
            $stmt_det->bind_param("iii", $id_guia, $id_producto, $cantidad);
            $stmt_det->execute();

            // Insertar en historial de movimientos
            $stmt_hist = $conexion->prepare("INSERT INTO historial_movimientos (id_producto, cantidad, tipo_movimiento, fecha_movimiento) VALUES (?, ?, 'ingreso', NOW())");
            $stmt_hist->bind_param("ii", $id_producto, $cantidad);
            $stmt_hist->execute();

            // Actualizar stock
            $stmt_stock = $conexion->prepare("UPDATE ferreteria SET stock = stock + ? WHERE id_producto = ?");
            $stmt_stock->bind_param("ii", $cantidad, $id_producto);
            $stmt_stock->execute();

            $totalInsertados += $cantidad;
            $resumen[] = ['id_producto' => $id_producto, 'cantidad' => $cantidad, 'accion' => 'Ingreso'];
        }
    }
}

// Procesar series
if (isset($input['series']) && is_array($input['series'])) {
    foreach ($input['series'] as $serie) {
        $id_serie = intval($serie['id_serie']);
        $seriales = $serie['seriales'];

        if ($id_serie > 0 && is_array($seriales)) {
            foreach ($seriales as $serial) {
                $serial = $conexion->real_escape_string(trim($serial));
                if ($serial !== '') {
                    // Insertar en detalle de la guía
                    $stmt_detserie = $conexion->prepare("INSERT INTO detalle_guia_series (id_guia, id_serie, serie_codigo) VALUES (?, ?, ?)");
                    $stmt_detserie->bind_param("iis", $id_guia, $id_serie, $serial);
                    $stmt_detserie->execute();

                    // Insertar en tabla de seriales
                    $stmt_serie = $conexion->prepare("INSERT INTO series_datos (id_serie, serie) VALUES (?, ?)");
                    $stmt_serie->bind_param("is", $id_serie, $serial);
                    $stmt_serie->execute();

                    // Movimiento historial
                    $stmt_hist = $conexion->prepare("INSERT INTO historial_movimientos (id_producto, id_serie, cantidad, tipo_movimiento, fecha_movimiento) 
                                                    VALUES (NULL, ?, 1, 'ingreso', NOW())");
                    $stmt_hist->bind_param("i", $id_serie);
                    $stmt_hist->execute();

                    $totalInsertados++;
                }
            }

            // Actualizar stock de la serie
            $cantidadSeriales = count($seriales);
            $stmt_stock = $conexion->prepare("UPDATE series SET stock = stock + ? WHERE id_serie = ?");
            $stmt_stock->bind_param("ii", $cantidadSeriales, $id_serie);
            $stmt_stock->execute();
        }
    }
}

// Respuesta exitosa
echo json_encode([
    'status' => 'ok',
    'id_guia' => $id_guia,
    'total_insertados' => $totalInsertados,
    'resumen' => $resumen
]);
?>
