<?php
/**
 * ARQUIVO: fechar_faturamento.php
 * DESCRIÇÃO: Altera o status para 'F' e realiza lançamento de Partida Dobrada via trib_cont.
 */
declare(strict_types=1);
header('Content-Type: application/json');
require_once "../configuracao/conexao.php"; 

$datem = date('dmYHis');
$enumvai = "FIN" . $_SERVER["REMOTE_ADDR"] . "-" . $datem;

$id      = (int)($_POST['codigo'] ?? 0);
$nat     = $_POST['natureza'] ?? ''; 
$tipo_f  = $_POST['tipo'] ?? 'proprio'; 

if ($id <= 0 || empty($nat)) {
    echo json_encode(['status' => 'erro', 'message' => 'ID ou Natureza não fornecidos.']);
    exit;
}

try {
    $mysqli->begin_transaction();

    // 1. Busca dados do título e do participante
    $sql_titulo = "SELECT t.reg_c140_status, t.reg_c140_vl_tit, t.reg_c140_num_tit, n.nf_cab_cod_part, n.nf_cab_nome 
                   FROM reg_c140 t
                   LEFT JOIN nf_cab n ON t.reg_c140_num_tit = n.codigo
                   WHERE t.codigo = $id";
    
    $res_tit = $mysqli->query($sql_titulo);
    $titulo = $res_tit->fetch_assoc();

    if (!$titulo) throw new Exception("Título não encontrado.");
    if ($titulo['reg_c140_status'] !== 'P') throw new Exception("Título já finalizado.");

    $valor    = (float)$titulo['reg_c140_vl_tit'];
    $codPart  = $titulo['nf_cab_cod_part'];
    $nomePart = $titulo['nf_cab_nome'];

    // 2. BUSCA DINÂMICA DA CONTABILIZAÇÃO (Igual ao processar.php)
    $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'];

    // 3. Lançamento Mestre (reg_i200)
    $numLcto = time() . rand(10, 99);
    $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', ?)");
    $stmtI200->bind_param("ids", $numLcto, $valor, $enumvai);
    $stmtI200->execute();
    $id_mestre = (int)$mysqli->insert_id;

    $hist = "FECHAMENTO - NAT: $nat - TIT: $id";

    // 4. Preparação do Detalhe (reg_i250)
    $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);

    // --- PERNA 1: DÉBITO ---
    $indD = 'D';
    $stmtI250->bind_param("isdsssss", $id_mestre, $ctaD, $valor, $indD, $hist, $codPart, $nomePart, $enumvai);
    $stmtI250->execute();

    // --- PERNA 2: CRÉDITO ---
    $indC = 'C';
    $stmtI250->bind_param("isdsssss", $id_mestre, $ctaC, $valor, $indC, $hist, $codPart, $nomePart, $enumvai);
    $stmtI250->execute();

    // 5. Finalização
    $mysqli->query("UPDATE reg_c140 SET reg_c140_status = 'F' WHERE codigo = $id");

    $mysqli->commit();
    echo json_encode(['status' => 'sucesso', 'message' => "Título fechado com lançamento de Partida Dobrada (D/C) via Natureza: $nat"]);

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