<?php
/**
 * ARQUIVO: processar.php
 * OBJETIVO: Processar estoque e contabilidade dinâmica via tabela trib_cont.
 */
declare(strict_types=1);
header('Content-Type: application/json');
require_once "../configuracao/conexao.php"; 

$datem = date('dmYHis');
$enumvai = "NF" . $_SERVER["REMOTE_ADDR"] . "-" . $datem;
$id = (int)($_GET['id'] ?? 0);

if ($id <= 0) {
    echo json_encode(['status' => 'erro', 'message' => 'ID da nota inválido.']);
    exit;
}


// =========================================================================
// COLOQUE AQUI - INÍCIO DA VALIDAÇÃO FINANCEIRA
// =========================================================================
$sql_valida = "
    SELECT 
        CAST(nf.nf_cab_tot_nf AS DECIMAL(15,2)) as total_nota,
        (SELECT SUM(CAST(reg_c140_vl_tit AS DECIMAL(15,2))) 
         FROM reg_c140 
         WHERE reg_c140_num_tit = nf.codigo) as total_financeiro
    FROM nf_cab nf
    WHERE nf.codigo = $id";

$res_val = $mysqli->query($sql_valida);
$validacao = $res_val->fetch_assoc();

$total_nota = (float)($validacao['total_nota'] ?? 0);
$total_financeiro = (float)($validacao['total_financeiro'] ?? 0);

// Verifica se há diferença maior que 1 centavo
if ($total_nota > 0 && abs($total_nota - $total_financeiro) > 0.01) {
    echo json_encode([
        'status' => 'erro', 
        'message' => "Financeiro divergente! Total Nota: R$ " . number_format($total_nota, 2, ',', '.') . 
                     " | Total Parcelas: R$ " . number_format($total_financeiro, 2, ',', '.')
    ]);
    exit;
}
// =========================================================================
// FIM DA VALIDAÇÃO
try {
    $mysqli->begin_transaction();

    // 1. BUSCA DADOS DA NOTA E DO PARTICIPANTE
    $res_nf = $mysqli->query("SELECT codigo, nf_cab_tot_nf, nf_cab_status, nf_cab_c_v, nf_cab_cod_part, nf_cab_nome FROM nf_cab WHERE codigo = $id");
    $nf = $res_nf->fetch_assoc();

    if (!$nf) throw new Exception("Nota fiscal não encontrada.");
    if ($nf['nf_cab_status'] !== 'P') throw new Exception("Esta nota já está finalizada.");

    $codPart  = $nf['nf_cab_cod_part']; //
    $nomePart = $nf['nf_cab_nome'];     //

    // 2. PREPARAÇÃO DOS STATEMENTS
    $stmtMov = $mysqli->prepare("INSERT INTO reg_h010_mov (ativo, data, reg_h010_mov_tipo_doc, reg_h010_mov_num_doc, reg_h010_mov_qtd_doc, reg_h010_mov_cod_item, reg_h010_mov_origem_doc, reg_h010_mov_dest_doc, reg_h010_mov_item, enumsistema) VALUES ('S', CURDATE(), 'NF', ?, ?, ?, ?, ?, ?, ?)");
    
    $stmtI200 = $mysqli->prepare("INSERT INTO reg_i200 (reg_i200_num_lcto, reg_i200_dt_lcto, reg_i200_vl_lcto, reg_i200_ind_lcto, ativo, enumsistema) VALUES (?, CURDATE(), ?, 'N', 's', ?)");
    
    // reg_i250 com campos específicos de participante
    $sqlI250 = "INSERT INTO reg_i250 (reg_i250_reg_i200, reg_i250_cod_cta, reg_i250_vl_dc, reg_i250_ind_dc, reg_i250_hist, reg_i250_cod_part, reg_i250_descr_part, ativo, enumsistema, data) 
                VALUES (?, ?, ?, ?, ?, ?, ?, 's', ?, CURDATE())";
    $stmtI250 = $mysqli->prepare($sqlI250);

    // 3. PROCESSAMENTO POR ITEM
    $itens = $mysqli->query("SELECT * FROM nf_itens WHERE nf_itens_nf_cab = $id");

    while ($item = $itens->fetch_assoc()) {
        $v_item  = (float)$item['nf_itens_tot_item'];
        $qtd     = (float)$item['nf_itens_qtd_item'];
        $codProd = $item['nf_itens_cod_item'];
        $nat     = $item['nf_itens_nat_oper'];

        // --- A. ESTOQUE ---
      $sentido = ($nf['nf_cab_c_v'] === 'S') ? 'S' : 'E';

if ($sentido === 'S') {
    // --- SAÍDA: Do Estoque para a Nota ---
    $origem   = 'NF'; 
    $destino  = 'NF'; 
    $mov_tipo = 'S';
} else {
    // --- ENTRADA: Da Nota para o Estoque ---
    $origem   = 'NF'; 
    $destino  = 'NF'; 
    $mov_tipo = 'E';
}
		
		
		
        $stmtMov->bind_param("idsssss", $id, $qtd, $codProd, $origem, $destino, $mov_tipo, $enumvai);
        $stmtMov->execute();

        // --- B. BUSCA DINÂMICA DA CONTABILIZAÇÃO (trib_cont) ---
        $res_trib = $mysqli->query("SELECT trib_cont_cta_debito, trib_cont_cta_credito FROM trib_cont WHERE trib_cont_descr_nat = '$nat' AND ativo = 'S' LIMIT 1");
        $contab = $res_trib->fetch_assoc();

        if (!$contab) {
            throw new Exception("Configuração contábil não encontrada para a natureza: $nat");
        }

        $ctaD = $contab['trib_cont_cta_debito'];
        $ctaC = $contab['trib_cont_cta_credito'];

        // --- C. LANÇAMENTO I200 (Mestre) ---
        $numLcto = time() . rand(10, 99);
        $stmtI200->bind_param("ids", $numLcto, $v_item, $enumvai);
        $stmtI200->execute();
        $id_mestre = (int)$mysqli->insert_id;

        $hist = "NF $id - $nat - ITEM $codProd";

        // --- D. LANÇAMENTOS I250 (Débito e Crédito) ---
        $indD = 'D'; $indC = 'C';
        
        // Débito
        $stmtI250->bind_param("isdsssss", $id_mestre, $ctaD, $v_item, $indD, $hist, $codPart, $nomePart, $enumvai);
        $stmtI250->execute();

        // Crédito
        $stmtI250->bind_param("isdsssss", $id_mestre, $ctaC, $v_item, $indC, $hist, $codPart, $nomePart, $enumvai);
        $stmtI250->execute();
    }

    // 4. FINALIZAÇÃO
    $mysqli->query("UPDATE nf_cab SET nf_cab_status = 'F' WHERE codigo = $id");
    $mysqli->commit();

    echo json_encode(['status' => 'sucesso', 'message' => "Processamento concluído via tabela tributária."]);

} catch (Exception $e) {
    $mysqli->rollback();
    echo json_encode(['status' => 'erro', 'message' => $e->getMessage()]);
}