<?php
/**
 * ARQUIVO: processar_faturamento.php
 * DESCRIÇÃO: Processa gravação/atualização com limpeza rigorosa de valores.
 */
include '../config.php'; 
require_once "../configuracao/conexao.php";

// Identificador de transação
$datem = date('d-m-y-H-i-s'); 
$enumvai = "c140141".$_SERVER["REMOTE_ADDR"]."-".$datem."-".time();

header('Content-Type: application/json');

/**
 * 1. LIMPEZA DE VALOR (CRÍTICO)
 * Transforma "R$ 1.250,50" em 1250.50
 */
function limparValorBruto($valor) {
    if (empty($valor)) return 0.00;
    // Remove tudo que não for número ou vírgula
    $apenasNumeros = preg_replace('/[^0-9,]/', '', $valor);
    // Troca a vírgula decimal por ponto
    $valorFinal = str_replace(',', '.', $apenasNumeros);
    return (float)$valorFinal;
}

// 2. Captura e Tratamento dos Dados
$codigo_form = $_POST['codigo'] ?? ''; 
$ind_emit    = $_POST['reg_c140_ind_emit'] ?? '1';
$ind_tit     = $_POST['tipo'] ?? '';   
$num_tit     = $_POST['numero'] ?? ''; 
$vl_tit      = limparValorBruto($_POST['reg_c140_vl_tit'] ?? '0'); 
$qtd_parc    = (int)($_POST['qtd_parc'] ?? 1); 
$desc_tit    = $_POST['desc'] ?? '';     
$cod_part    = $_POST['id_participante'] ?? ''; 
$nome_part   = $_POST['nome_participante'] ?? ''; 

$p_vencs     = $_POST['p_venc'] ?? [];
$p_valors    = $_POST['p_valor'] ?? []; 
$p_status    = $_POST['p_status'] ?? [];
$nat        = $_POST['natureza'] ?? [];

// 3. Validação de Soma das Parcelas
$soma_parcelas = 0;
if (!empty($p_valors)) {
    foreach ($p_valors as $valor) {
        $soma_parcelas += (float)$valor;
    }
}

// Comparação com arredondamento para evitar erros de dízima do PHP
if (round($vl_tit, 2) !== round($soma_parcelas, 2)) {
    echo json_encode([
        'status' => 'erro', 
        'message' => "Divergência de Total: Título (R$ " . number_format($vl_tit, 2, ',', '.') . ") diferente da Grade (R$ " . number_format($soma_parcelas, 2, ',', '.') . "). Clique em 'AJUSTAR ÚLTIMA' na tela antes de gravar."
    ]);
    exit;
}

try {
    $mysqli->begin_transaction();

    $id_pai = !empty($codigo_form) ? (int)$codigo_form : null;

    if ($id_pai) {
        // ATUALIZAÇÃO
        $stmtCheck = $mysqli->prepare("SELECT reg_c140_status FROM reg_c140 WHERE codigo = ?");
        $stmtCheck->bind_param("i", $id_pai);
        $stmtCheck->execute();
        $status_atual = $stmtCheck->get_result()->fetch_column();

        if ($status_atual && $status_atual !== 'P') {
            throw new Exception("Bloqueio: Título status '$status_atual' não pode ser editado.");
        }

        $sqlU = "UPDATE reg_c140 SET 
                    reg_c140_ind_emit=?, reg_c140_ind_tit=?, reg_c140_desc_tit=?, 
                    reg_c140_num_tit=?, reg_c140_qtd_parc=?, reg_c140_vl_tit=?, 
                    reg_c140_cod_part=?, reg_c140_nome=?, enumsistema=?,reg_c140_nat_oper=?  
                 WHERE codigo=?";
        $stmtU = $mysqli->prepare($sqlU);
        $stmtU->bind_param("ssssidssssi", $ind_emit, $ind_tit, $desc_tit, $num_tit, $qtd_parc, $vl_tit, $cod_part, $nome_part, $enumvai, $nat, $id_pai);
        $stmtU->execute();
        $mysqli->query("DELETE FROM reg_c141 WHERE reg_c141_c140_origem = $id_pai");
        $msg = "Atualizado com sucesso!";
    } else {
        // INSERÇÃO
        $sqlI = "INSERT INTO reg_c140 
                (ativo, data, reg_c140_ind_emit, reg_c140_ind_tit, reg_c140_desc_tit, 
                 reg_c140_num_tit, reg_c140_qtd_parc, reg_c140_vl_tit, reg_c140_status, 
                 reg_c140_cod_part, reg_c140_nome, enumsistema,reg_c140_nat_oper) 
                VALUES ('s', CURDATE(), ?, ?, ?, ?, ?, ?, 'P', ?, ?, ?,?)";
        $stmtI = $mysqli->prepare($sqlI);
       $stmtI->bind_param("ssssidssss", $ind_emit, $ind_tit, $desc_tit, $num_tit, $qtd_parc, $vl_tit, $cod_part, $nome_part, $enumvai, $nat);
$stmtI->execute();        $id_pai = $mysqli->insert_id;
        $msg = "Lançado com sucesso!";
    }

    // Gravação das Parcelas
    if (!empty($p_valors)) {
        $stmt141 = $mysqli->prepare("INSERT INTO reg_c141 (ativo, data, reg_c141_num_parc, reg_c141_dt_vcto, reg_c141_vl_parc, reg_c141_c140_origem, reg_c141_cod_part, reg_c141_nome, reg_c141_status, enumsistema) VALUES ('s', CURDATE(), ?, ?, ?, ?, ?, ?, ?, ?)");

        foreach ($p_valors as $i => $valor) {
            $num_p = $i + 1;
            $venc  = $p_vencs[$i];
            $vlr   = (float)$valor;
            $st    = $p_status[$i] ?? 'P';
            $stmt141->bind_param("isdissss", $num_p, $venc, $vlr, $id_pai, $cod_part, $nome_part, $st, $enumvai);
            $stmt141->execute();
        }
    }

    $mysqli->commit();
    echo json_encode(['status' => 'sucesso', 'message' => $msg, 'codigo' => $id_pai]);

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