<?php
session_start();
require_once 'includes/db.php';

// Si no hay sesión de usuario, redirigir al login
if (!isset($_SESSION['usuario_id'])) {
    header('Location: login.php');
    exit;
}

// Verificar si se enviaron los datos requeridos
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // Obtener los datos del formulario
    $cliente_id = isset($_POST['cliente_id']) ? intval($_POST['cliente_id']) : 0;
    $producto_id = isset($_POST['producto_id']) ? intval($_POST['producto_id']) : 0;
    $cantidad = isset($_POST['cantidad']) ? intval($_POST['cantidad']) : 0;
    $precio_unitario = isset($_POST['precio_unitario']) ? floatval($_POST['precio_unitario']) : 0;
    $tipo_venta = isset($_POST['tipo_venta']) ? $_POST['tipo_venta'] : 'contado';
    $tipo_precio = isset($_POST['tipo_precio']) ? $_POST['tipo_precio'] : '';
    $primera_cuota = isset($_POST['primera_cuota']) ? intval($_POST['primera_cuota']) : 0;
    
    // Validar datos mínimos requeridos
    if (!$cliente_id || !$producto_id || !$cantidad || !$precio_unitario) {
        // Redireccionar con un mensaje de error
        header('Location: index.php?error=datos_incompletos');
        exit;
    }
    
    try {
        // Crear conexión a la base de datos
        $db = new Database();
        $pdo = $db->getPDO();
        
        // Iniciar transacción
        $pdo->beginTransaction();
        
        // Obtener el último grupo ID o crear uno nuevo
        $stmt = $db->prepare("SELECT MAX(grupo_id) as ultimo_grupo FROM venta_items");
        $stmt->execute();
        $resultado = $stmt->fetch(PDO::FETCH_ASSOC);
        $grupo_id = ($resultado && $resultado['ultimo_grupo']) ? $resultado['ultimo_grupo'] + 1 : 1;
        
        // Calcular subtotal
        $subtotal = $cantidad * $precio_unitario;
        
        // Insertar la venta - Ajustada a la estructura real de la tabla
        $stmt = $db->prepare("INSERT INTO venta_items (
            cliente_id, producto_id, cantidad, precio_unitario,
            subtotal, tipo_pago, cantidad_cuotas,
            grupo_id, estado, vendedor_id, primera_cuota
        ) VALUES (
            :cliente_id, :producto_id, :cantidad, :precio_unitario,
            :subtotal, :tipo_pago, :cantidad_cuotas,
            :grupo_id, 'EN_CURSO', :vendedor_id, :primera_cuota
        )");
        
        // Determinar cantidad de cuotas basado en tipo_precio
        $cantidad_cuotas = 0;
        if (strpos($tipo_precio, 'credito_') === 0) {
            $cantidad_cuotas = intval(str_replace('credito_', '', $tipo_precio));
        }
        
        $stmt->execute([
            ':cliente_id' => $cliente_id,
            ':producto_id' => $producto_id,
            ':cantidad' => $cantidad,
            ':precio_unitario' => $precio_unitario,
            ':subtotal' => $subtotal,
            ':tipo_pago' => $tipo_venta, // contado o credito
            ':cantidad_cuotas' => $cantidad_cuotas,
            ':grupo_id' => $grupo_id,
            ':vendedor_id' => $_SESSION['usuario_id'],
            ':primera_cuota' => $primera_cuota
        ]);
        
        // Obtener el ID de la venta insertada
        $venta_id = $pdo->lastInsertId();
        
        // Actualizar el stock del producto
        $stmt = $db->prepare("UPDATE productos SET stock = stock - :cantidad WHERE id = :producto_id");
        $stmt->execute([
            ':cantidad' => $cantidad,
            ':producto_id' => $producto_id
        ]);
        
        // Confirmar transacción
        $pdo->commit();
        
        // Guardar datos de la venta en la sesión
        $_SESSION['venta_activa'] = [
            'venta_id' => $venta_id,
            'grupo_id' => $grupo_id,
            'cliente_id' => $cliente_id
        ];
        
        // Guardar último cliente seleccionado en la sesión
        $stmt = $db->prepare("SELECT nombre FROM clientes WHERE id_cliente = ?");
        $stmt->execute([$cliente_id]);
        $cliente = $stmt->fetch(PDO::FETCH_ASSOC);
        
        if ($cliente) {
            $_SESSION['ultimo_cliente'] = [
                'id' => $cliente_id,
                'nombre' => $cliente['nombre'],
                'grupo_id' => $grupo_id
            ];
            
            // También guardar el nombre del cliente
            $_SESSION['cliente_nombre'] = $cliente['nombre'];
        }
        
        // Redireccionar a la página de ventas en curso con el ID de la venta
        header("Location: ventas_en_curso.php?venta_id={$venta_id}");
        exit;
        
    } catch (Exception $e) {
        if (isset($pdo)) {
            $pdo->rollBack();
        }
        
        // Log del error
        error_log('Error al procesar venta: ' . $e->getMessage());
        
        // Redireccionar con error
        header('Location: index.php?error=fallo_procesar&msg=' . urlencode($e->getMessage()));
        exit;
    }
} else {
    // Si no se accedió por POST, redirigir
    header('Location: index.php');
    exit;
}
?>
