<?php
/**
 * ARQUIVO: consistir_faturamento.php
 * DESCRIÇÃO: Valida se o lançamento condiz com o pedido original (ped_cab).
 * Permite gravação avulsa se o pedido não for encontrado.
 */

// 1. Configurações de Erro e Cabeçalho
ini_set('display_errors', 0);
error_reporting(E_ALL);
header('Content-Type: application/json');

try {
    // 2. Conexão com o Banco de Dados
    require_once "../configuracao/conexao.php";

    if (!$mysqli) {
        throw new Exception("Erro: Falha na conexão com o banco de dados.");
    }

    // 3. Recebimento dos Dados via JSON (Enviados pelo fetch do index.php)
    $json = file_get_contents('php://input');
    $dados = json_decode($json, true);

    if (!$dados) {
        throw new Exception("Erro: Nenhum dado recebido para consistência.");
    }

    // Mapeamento das variáveis vindas do JavaScript
    $numPedido = $dados['numero_pedido'] ?? '';     // ID do pedido original
    $codPart   = $dados['cod_participante'] ?? ''; // ID do cliente/fornecedor
    $vlrTela   = (float)($dados['valor_total'] ?? 0); // Valor total limpo (sem R$)

    // 4. Busca do Pedido no Banco (ped_cab)
    $query = "SELECT ped_cab_cod_part, ped_cab_tot_ped, ped_cab_status 
              FROM ped_cab 
              WHERE codigo = ? LIMIT 1";
              
    $stmt = $mysqli->prepare($query);
    if (!$stmt) { 
        throw new Exception("Erro Interno: Falha ao preparar consulta SQL."); 
    }
    
    $stmt->bind_param("s", $numPedido);
    $stmt->execute();
    $resBanco = $stmt->get_result();
    $pedido = $resBanco->fetch_assoc();

    // --- LÓGICA DE NOTA AVULSA ---
    // Se o pedido não existir, permitimos a gravação como "Avulsa"
    if (!$pedido) {
        echo json_encode([
            'status' => 'ok', 
            'mensagem' => "Nota Avulsa: Pedido nº $numPedido não localizado. Gravação liberada sem vínculo."
        ]);
        exit;
    }

    // 5. Validações Rigorosas (Caso o pedido EXISTA no banco)
    $valorBanco = (float)$pedido['ped_cab_tot_ped'];
    $diff = abs($valorBanco - $vlrTela);

    // Valida se o código do participante confere
    if ($pedido['ped_cab_cod_part'] != $codPart) {
        echo json_encode([
            'status' => 'erro', 
            'mensagem' => "Divergência de Cadastro: No pedido original o código é {$pedido['ped_cab_cod_part']}, mas na tela está $codPart."
        ]);
        exit;
    }

    // Valida se o valor total confere com tolerância de centavos
    if ($diff > 0.01) {
        echo json_encode([
            'status' => 'erro', 
            'mensagem' => "Divergência de Valor: O Pedido original é R$ " . number_format($valorBanco, 2, ',', '.') . ", mas você lançou R$ " . number_format($vlrTela, 2, ',', '.')
        ]);
        exit;
    }

    // 6. Atualização de Status do Pedido Original
    // Marca como 'F' (Faturado) apenas se estiver 'P' (Pendente)
    $update = $mysqli->prepare("UPDATE ped_cab SET ped_cab_status = 'F' WHERE codigo = ? AND ped_cab_status = 'P'");
    $update->bind_param("s", $numPedido);
    $update->execute();

    // 7. Retorno de Sucesso Total
    echo json_encode([
        'status' => 'ok', 
        'mensagem' => "Consistência OK! Pedido $numPedido vinculado e faturado com sucesso."
    ]);

} catch (Exception $e) {
    // Retorno em caso de falha técnica no servidor
    echo json_encode([
        'status' => 'erro', 
        'mensagem' => "Erro no Processamento: " . $e->getMessage()
    ]);
}