<?php
// Configuración inicial
ini_set('display_errors', 1);
error_reporting(E_ALL);
ini_set('log_errors', 1);
ini_set('error_log', 'C:/xampp/htdocs/jk/error.log');

header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST');
header('Access-Control-Allow-Headers: Content-Type');

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

try {
    // Log del inicio de la solicitud
    error_log("Iniciando procesamiento de actualizar_estado_pedido.php");
    
    // Capturar y validar input
    $input = file_get_contents('php://input');
    error_log("Input recibido: " . $input);
    
    $data = json_decode($input, true);
    if (json_last_error() !== JSON_ERROR_NONE) {
        throw new Exception('Error decodificando JSON: ' . json_last_error_msg());
    }

    // Validar datos requeridos
    if (empty($data['token'])) throw new Exception('Token no proporcionado');
    if (empty($data['estado'])) throw new Exception('Estado no proporcionado');
    if (empty($data['cliente_id'])) throw new Exception('Cliente ID no proporcionado');

    // Validar que el usuario esté logueado
    if (empty($_SESSION['usuario_id'])) {
        throw new Exception('Usuario no autenticado');
    }

    $db = new Database();
    
    // Verificar si el pedido existe
    $pedido = $db->query(
        "SELECT id FROM pedidos WHERE token = ? AND estado = 'pendiente'",
        [$data['token']]
    )->fetch();

    if (!$pedido) {
        throw new Exception('Pedido no encontrado o ya procesado');
    }

    // Obtener detalles del pedido (CONSULTA CORREGIDA)
    $detalles = $db->query(
        "SELECT pd.* FROM pedidos_detalle pd 
        WHERE pd.id_pedido = ?",
        [$pedido['id']]
    )->fetchAll();

    if (empty($detalles)) {
        throw new Exception('No se encontraron detalles del pedido');
    }

    error_log("Detalles del pedido encontrados: " . print_r($detalles, true));

    // Generar IDs únicos
    $venta_id = time();
    $grupo_id = 'venta_' . uniqid();
    $fecha_actual = date('Y-m-d H:i:s');

    // Insertar items en venta_items (CONSULTA CORREGIDA)
    foreach ($detalles as $detalle) {
        error_log("Procesando detalle: " . print_r($detalle, true));
        
        $result = $db->query(
            "INSERT INTO venta_items (
                venta_id, grupo_id, producto_id, cantidad, precio_unitario, 
                subtotal, tipo_pago, cantidad_cuotas, created_at, cliente_id,
                estado, vendedor_id, primera_cuota, tipo_venta, usuario_id, 
                monto_primera_cuota
            ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
            [
                $venta_id,
                $grupo_id,
                $detalle['id_producto'],
                $detalle['cantidad'],
                $detalle['precio_unitario'],
                $detalle['subtotal'],
                'contado',
                0,
                $fecha_actual,
                $data['cliente_id'],
                'EN_CURSO',
                $_SESSION['usuario_id'], // Cambiado: usamos el ID del usuario logueado como vendedor
                0,
                'contado',
                $_SESSION['usuario_id'],
                0
            ]
        );
    }

    // Actualizar estado del pedido
    $result = $db->query(
        "UPDATE pedidos SET estado = ? WHERE token = ? AND estado = 'pendiente'",
        [$data['estado'], $data['token']]
    );

    // Después de actualizar el pedido exitosamente
    if ($result->rowCount() > 0) {
        echo json_encode([
            'success' => true,
            'redirect' => 'index.php'
        ]);
    } else {
        throw new Exception('No se pudo actualizar el pedido');
    }

} catch (Exception $e) {
    error_log("Error en actualizar_estado_pedido.php: " . $e->getMessage());
    error_log("Stack trace: " . $e->getTraceAsString());
    
    http_response_code(500);
    echo json_encode([
        'success' => false,
        'error' => $e->getMessage(),
        'debug' => [
            'input_raw' => $input ?? null,
            'input_decoded' => $data ?? null
        ]
    ]);
}