<?php
// actualizar_estado_factura.php

// ? Errores (quitar en producción)
ini_set('display_errors', 1);
error_reporting(E_ALL);

// ? CORS
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: Content-Type");
header("Access-Control-Allow-Methods: POST, OPTIONS");
header("Content-Type: application/json; charset=utf-8");
header("Access-Control-Max-Age: 86400");

if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { http_response_code(200); exit; }

// ? Conexión
require_once(__DIR__ . '/../config.php');

// Función para escribir en el archivo de log
function escribirLog($mensaje) {
    $archivo = __DIR__ . '/debug_log_actualizar_estado_factura.txt';
    $timestamp = date('Y-m-d H:i:s');
    file_put_contents($archivo, "[$timestamp] $mensaje\n", FILE_APPEND);
}

// Iniciar el log
escribirLog("=== INICIO DE EJECUCIÓN ===");

// Obtener input
 $input = json_decode(file_get_contents('php://input'), true);

// --- LÓGICA SIMPLIFICADA PARA DEPURACIÓN ---
 $response = ['success' => false, 'debug_steps' => []];

try {
    escribirLog("Script iniciado.");
    
    if (!$input) {
        escribirLog("ERROR: No se recibió JSON en el cuerpo de la petición.");
        $response['debug_steps'][] = "No se recibió JSON en el cuerpo de la petición.";
        $response['message'] = 'JSON inválido';
        echo json_encode($response, JSON_PRETTY_PRINT);
        exit;
    }
    
    escribirLog("JSON recibido: " . json_encode($input));
    $response['debug_steps'][] = "JSON recibido: " . json_encode($input);

    // Obtener parámetros
    $slug_tienda = $input['slug_tienda'] ?? null;
    $numero_factura = $input['numero_factura'] ?? null;
    $estado = $input['estado'] ?? null;

    if (!$slug_tienda || !$numero_factura || !$estado) {
        escribirLog("ERROR: Faltan parámetros requeridos. slug_tienda: $slug_tienda, numero_factura: $numero_factura, estado: $estado");
        $response['debug_steps'][] = "Faltan parámetros requeridos.";
        $response['message'] = 'Faltan datos: slug_tienda, numero_factura y estado son obligatorios.';
        echo json_encode($response, JSON_PRETTY_PRINT);
        exit;
    }
    
    escribirLog("Parámetros validados: slug=$slug_tienda, factura=$numero_factura, estado=$estado");
    $response['debug_steps'][] = "Parámetros validados: slug=$slug_tienda, factura=$numero_factura, estado=$estado";

    // Preparar la consulta
    $sql = "UPDATE facturas SET estado = ? WHERE numero_factura = ? AND slug_tienda = ?";
    escribirLog("Consulta SQL a ejecutar: $sql");
    $stmt = $mysqli->prepare($sql);
    
    if ($stmt === false) {
        $error_msg = "Fallo al preparar la consulta: " . $mysqli->error;
        escribirLog("ERROR: $error_msg");
        $response['debug_steps'][] = $error_msg;
        $response['message'] = 'Error al preparar la consulta en la base de datos.';
        echo json_encode($response, JSON_PRETTY_PRINT);
        exit;
    }
    
    escribirLog("Consulta preparada con éxito.");
    $response['debug_steps'][] = "Consulta preparada con éxito.";

    // Vincular y ejecutar
    $stmt->bind_param("sss", $estado, $numero_factura, $slug_tienda);
    $stmt->execute();
    
    $affected_rows = $stmt->affected_rows;
    escribirLog("Consulta ejecutada. Filas afectadas: $affected_rows");
    $response['debug_steps'][] = "Consulta ejecutada. Filas afectadas: " . $affected_rows;

    if ($affected_rows > 0) {
        escribirLog("ÉXITO: Estado de la factura actualizado correctamente.");
        $response['success'] = true;
        $response['message'] = 'Estado de la factura actualizado correctamente.';
    } else {
        escribirLog("ADVERTENCIA: No se encontró la factura para actualizar o el estado ya era el mismo.");
        $response['message'] = 'No se encontró la factura para actualizar o el estado ya era el mismo.';
        
        // Verifiquemos si la fila existe en absoluto.
        $check_sql = "SELECT id, estado FROM facturas WHERE numero_factura = ? AND slug_tienda = ?";
        escribirLog("Consulta de verificación: $check_sql");
        $check_stmt = $mysqli->prepare($check_sql);
        $check_stmt->bind_param("ss", $numero_factura, $slug_tienda);
        $check_stmt->execute();
        $result = $check_stmt->get_result();
        
        if ($result->num_rows === 0) {
            escribirLog("DEPURACIÓN: La factura NO fue encontrada en la base de datos con esos criterios.");
            $response['debug_steps'][] = "DEPURACIÓN: La factura NO fue encontrada en la base de datos con esos criterios.";
        } else {
            $factura_data = $result->fetch_assoc();
            $estado_actual = $factura_data['estado'];
            escribirLog("DEPURACIÓN: La factura SÍ fue encontrada. Su estado actual es: '$estado_actual'");
            $response['debug_steps'][] = "DEPURACIÓN: La factura SÍ fue encontrada. Su estado actual es: '$estado_actual'";
        }
        $check_stmt->close();
    }

    $stmt->close();
    $mysqli->close();
    escribirLog("Conexión cerrada.");

} catch (Exception $e) {
    $error_msg = "EXCEPCIÓN CAPTURADA: " . $e->getMessage();
    escribirLog("ERROR: $error_msg");
    $response['debug_steps'][] = $error_msg;
    $response['message'] = 'Error del servidor: ' . $e->getMessage();
}

escribirLog("Respuesta final: " . json_encode($response));
escribirLog("=== FIN DE EJECUCIÓN ===\n");

// Respuesta final
echo json_encode($response, JSON_PRETTY_PRINT);
?>