<?php
include '../config.php';
include '../configuracao/modelo.php'; // Garante que a função validaAcessoTela está carregada

session_start();
$numero_da_tela = 12; // ID gerado pelo banco

    if (!validaAcessoTela($mysqli, $_SESSION['id'], $numero_da_tela)) {
        echo "<script>alert('Sem permissão para o teste número $numero_da_tela!'); window.location.href='../lista/index.php';</script>";
        exit();
    }


?>
<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <title>Financeiro - Lançamento [Morfo Engine]</title>
    <style>
        * { box-sizing: border-box; }
        html, body { 
            height: 100%; margin: 0; padding: 0; 
            background-color: #d4d0c8; 
            font-family: "Tahoma", sans-serif; font-size: 11px; 
        }
        
        .desktop-wrapper { 
            display: flex; flex-direction: column; height: 100vh; padding: 4px; 
        }

        .window { 
            display: flex; flex-direction: column; flex: 1; 
            border: 2px solid; border-color: #ffffff #808080 #808080 #ffffff; 
            background: #c0c0c0; box-shadow: 1px 1px 0px #000; 
            min-width: 320px;
        }

        .title-bar { 
            background: linear-gradient(90deg, #000080, #1084d0); color: white; 
            padding: 3px 6px; font-weight: bold; display: flex; justify-content: space-between; align-items: center; 
        }

        .content { 
            padding: 8px; flex: 1; display: flex; flex-direction: column; gap: 8px; 
            overflow-y: auto; overflow-x: hidden; 
        }

        fieldset { border: 2px inset #fff; padding: 10px; margin: 0; min-width: 0; }
        legend { font-weight: bold; padding: 0 5px; }
        
        .header-row { 
            display: flex; flex-wrap: wrap; gap: 8px; 
            margin-bottom: 8px; align-items: flex-end; 
        }

        .field-group { 
            display: flex; flex-direction: column; flex-grow: 1; min-width: 80px; 
        }

        label { margin-bottom: 2px; font-weight: bold; white-space: nowrap; }
        
        .input-search-group { display: flex; gap: 2px; }
        .btn-search { 
            width: 22px; height: 22px; background: #d4d0c8; border: 2px solid; 
            border-color: #fff #808080 #808080 #fff; cursor: pointer; 
            display: flex; align-items: center; justify-content: center; font-size: 12px;
        }
        .btn-search:active { border-color: #808080 #fff #fff #808080; }

        input, select { 
            padding: 3px; border: 2px inset #fff; background: #fff; 
            font-family: "Tahoma", sans-serif; font-size: 11px; height: 22px; outline: none; width: 100%;
        }
        
        input:focus, select:focus { background: #ffffca; border: 2px inset #000080; }
        .money { text-align: right; font-family: "Courier New", monospace; font-weight: bold; color: #000080; }
        .readonly { background: #e0e0e0; cursor: not-allowed; }

        .table-container { 
            flex: 1; background: #fff; border: 2px solid; 
            border-color: #808080 #fff #fff #808080; overflow: auto; min-height: 150px;
        }

        table { width: 100%; border-collapse: collapse; min-width: 600px; }
        th { 
            border: 1px solid #808080; padding: 6px; background: #d4d0c8; 
            position: sticky; top: 0; font-size: 10px; text-transform: uppercase; z-index: 10;
        }
        td { border: 1px solid #f0f0f0; padding: 2px; }
        
        .footer-bar { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 8px; padding: 5px 0; }
        
        .btn-main { 
            padding: 4px 15px; background: #d4d0c8; border: 2px solid; 
            border-color: #fff #808080 #808080 #fff; font-weight: bold; cursor: pointer; min-width: 100px;
        }
        .btn-main:active { border-color: #808080 #fff #fff #808080; }

        .status-bar { display: flex; flex-wrap: wrap; background: #c0c0c0; border-top: 1px solid #808080; }
        .status-panel { 
            border: 1px inset #fff; padding: 4px 8px; flex: 1; 
            display: flex; justify-content: space-between; align-items: center; min-width: 150px;
        }

        .w-small { flex-grow: 0; flex-basis: 60px; }
        .w-medium { flex-grow: 0; flex-basis: 110px; }
    </style>
</head>
<body>

<div class="desktop-wrapper">
    <div class="window">
        <div class="title-bar">
            <span>Financeiro - Lançamento [MODO ADMINISTRADOR]</span>
            <div style="display:flex; gap: 2px;">
                <button type="button" style="width:16px; height:14px; font-size:9px; background:#c0c0c0; border:1px solid #000;">_</button>
                <button type="button" style="width:16px; height:14px; font-size:9px; background:#c0c0c0; border:1px solid #000;" onclick="fecharJanela()">X</button>
            </div>
        </div>

        <form id="financeiroForm" class="content" onsubmit="event.preventDefault();">
            <fieldset>
                <legend>Dados do Título (Registros C140/C141)</legend>
                
                <div class="header-row">
                    <div class="field-group w-small">
                        <label>Cód:</label>
                        <div class="input-search-group">
                            <input type="text" id="val_codigo" name="codigo" class="readonly" placeholder="AUTO" readonly>
                            <button type="button" class="btn-search" onclick="buscarFaturamento()">&#128269;</button>
                        </div>
                    </div>
                    <div class="field-group w-small">
                        <label>ID Part.:</label>
                        <input type="text" id="val_id_participante" name="id_participante">
                    </div>
                    <div class="field-group" style="flex-basis: 150px;">
                        <label>Nome do Participante:</label>
                        <div class="input-search-group">
                            <input type="text" id="val_nome_participante" name="nome_participante">
                            <button type="button" class="btn-search" onclick="buscarParticipante()">&#128269;</button>
                        </div>
                    </div>
					       <div class="field-group" style="flex-basis: 150px;">
                        <label>Natureza:</label>
                        <div class="input-search-group">
                            <input type="text" id="val_natureza" name="natureza">
				             <button type="button" class="btn-search" onclick="buscarNatureza()">&#128269;</button>
                        </div>
                    </div>
                    <div class="field-group w-medium">
                        <label>Emitente:</label>
                        <select id="val_reg_c140_ind_emit" name="reg_c140_ind_emit" onchange="limparTitulo()">
                            <option value="0">0-Própria</option>
                            <option value="1" selected>1-Terceiros</option>
                        </select>
                    </div>
                </div>

                <div class="header-row">
                    <div class="field-group w-small">
                        <label>Tipo:</label>
                        <select id="val_tipo" name="tipo" onchange="atualizarDescricao()">
                            <option value="NF">NF</option>
                            <option value="DU">DUPL</option>
                            <option value="RC">RECIBO</option>
                        </select>
                    </div>
                    <div class="field-group w-medium">
                        <label>Nº Título:</label>
                        <div class="input-search-group">
                            <input type="text" id="val_numero" name="numero" required oninput="atualizarDescricao()">
                            <button type="button" class="btn-search" onclick="buscarDocumento()">&#128269;</button>
                        </div>
                    </div>
                    <div class="field-group w-medium">
                        <label>Pgto Padrão:</label>
                        <select id="val_meio_padrao">
                            <option value="BOLETO">BOLETO</option>
                            <option value="PIX">PIX</option>
                            <option value="DINHEIRO">DINHEIRO</option>
                        </select>
                    </div>
                    <div class="field-group w-medium">
                        <label>Data Lanc:</label>
                        <input type="date" name="data" value="<?= date('Y-m-d') ?>">
                    </div>
                    <div class="field-group" style="flex-basis: 200px;">
                        <label>Descrição:</label>
                        <input type="text" id="val_desc" name="desc">
                    </div>
                    <div class="field-group w-medium">
                        <label>Vlr. Bruto:</label>
                        <input type="text" id="val_bruto" name="reg_c140_vl_tit" class="money" onkeyup="mascaraMoeda(this)" oninput="atualizarTotais()">
                    </div>
                    <div class="field-group w-medium">
                        <label>Desconto:</label>
                        <input type="text" id="val_desc_v" name="reg_c140_vl_desc" class="money" onkeyup="mascaraMoeda(this)" oninput="atualizarTotais()">
                    </div>
                    <div class="field-group w-small">
                        <label>Parc:</label>
                        <input type="number" id="val_qtd" name="qtd_parc" value="1" min="1">
                    </div>
                </div>
            </fieldset>

            <fieldset style="flex: 1; display: flex; flex-direction: column;">
                <legend>Grade de Parcelamento</legend>
                <div class="table-container">
                    <table id="tabelaParcelas">
                        <thead>
                            <tr>
                                <th width="150">Identificador</th>
                                <th width="60">ID Part.</th>
                                <th>Nome Participante</th> 
                                <th width="60">Parc.</th>
                                <th width="100">Status</th> 
                                <th width="110">Meio Pgto</th>
                                <th width="110">Vencimento</th>
                                <th width="120">Valor (R$)</th>
                                <th width="40"></th>
                            </tr>
                        </thead>
                        <tbody></tbody>
                    </table>
                </div> 
                <div class="footer-bar">
                    <button type="button" class="btn-main" onclick="gerarParcelas()">GERAR GRADE</button>
                    <button type="button" class="btn-main" onclick="reajustarSoma()">AJUSTAR ÚLTIMA</button>
                    <button type="button" id="btnGravar" class="btn-main" style="background:#000080; color:white" onclick="gravarDados()">GRAVAR</button>
                    <button type="button" class="btn-main" onclick="fecharFaturamento()">FECHAR</button>   
					<button type="button" class="btn-main" onclick="apagarFaturamento()">APAGAR</button>
                </div>
            </fieldset>
        </form>

        <div class="status-bar">
            <div class="status-panel">
                <span>LÍQUIDO: R$ <span id="display_liquido">0,00</span></span>
            </div>
            <div class="status-panel">
                <span style="color:#000080">GRADE: R$ <span id="display_soma">0,00</span></span>
            </div>
        </div>
    </div>
</div>

<script>
// --- FUNÇÕES DE BUSCA E POP-UPS ---

function fecharJanela() {
    if (confirm("Deseja realmente sair? Dados não salvos serão perdidos.")) {
        window.location.href = '../lista/index.php';
    }
}

// Adiciona o evento ao carregar o documento
document.addEventListener('keydown', function(event) {
    if (event.key === 'Enter' || event.keyCode === 13) {
        event.preventDefault();
        const focado = document.activeElement;
        if (focado.id === 'val_bruto' || focado.id === 'val_desc_v' || focado.id === 'val_qtd') {
            gerarParcelas();
        }
    }
});

function buscarDocumento() {
    const largura = 700, altura = 500;
    const esquerda = (screen.width - largura) / 2, topo = (screen.height - altura) / 2;
    window.open('busca_documento.php', 'BuscaDocumento', `width=${largura},height=${altura},left=${esquerda},top=${topo},scrollbars=yes,resizable=yes`);
}

function buscarFaturamento() {
    const largura = 750, altura = 550;
    const esquerda = (screen.width - largura) / 2, topo = (screen.height - altura) / 2;
    window.open('busca_faturamento.php', 'Busca', `width=${largura},height=${altura},left=${esquerda},top=${topo},scrollbars=yes,resizable=yes`);
}

function buscarParticipante() {
    const largura = 600, altura = 500;
    const esquerda = (screen.width - largura) / 2, topo = (screen.height - altura) / 2;
    window.open('busca_participante.php', 'BuscaParticipante', `width=${largura},height=${altura},left=${esquerda},top=${topo},scrollbars=yes,resizable=yes`);
}

// --- LÓGICA DE NEGÓCIO E GRADE ---
function carregarDadosDoBanco(dados) {
    const fat = dados.faturamento || dados.cabecalho;
    const itens = dados.parcelas || dados.itens;
    if (!fat) return alert("Erro ao carregar cabeçalho.");

    document.getElementById('val_codigo').value = fat.codigo;
    document.getElementById('val_numero').value = fat.reg_c140_num_tit;
    document.getElementById('val_tipo').value = fat.reg_c140_ind_tit;
    document.getElementById('val_reg_c140_ind_emit').value = fat.reg_c140_ind_emit;
    document.getElementById('val_desc').value = fat.reg_c140_desc_tit;
    document.getElementById('val_qtd').value = fat.reg_c140_qtd_parc; 
    document.getElementById('val_natureza').value = fat.reg_c140_nat_oper; 
    
	
	
	
    let vBruto = parseFloat(fat.reg_c140_vl_tit) || 0;
    document.getElementById('val_bruto').value = "R$ " + vBruto.toLocaleString('pt-BR', {minimumFractionDigits: 2});

    const tbody = document.querySelector("#tabelaParcelas tbody");
    tbody.innerHTML = "";

    if (itens) {
        itens.forEach(p => {
            const row = tbody.insertRow();
            const nP = p.reg_c141_num_parc.toString().padStart(2, '0');
            const st = p.reg_c141_status || 'A'; 
            row.innerHTML = `
                <td class="col-id" style="font-weight:bold; color:#000080;">${fat.reg_c140_ind_tit} ${fat.reg_c140_num_tit}/${nP}</td>
                <td><input type="text" name="p_cod_part[]" value="${p.reg_c141_cod_part}" class="readonly" readonly style="width:100%; border:none;"></td>
                <td><input type="text" name="p_nome_part[]" value="${p.reg_c141_nome}" class="readonly" readonly style="width:100%; border:none;"></td>
                <td style="text-align:center">${p.reg_c141_num_parc}</td>
                <td>
                    <select name="p_status[]" style="width:100%; border:none;">
                        <option value="A" ${st === 'P' ? 'selected' : ''}>P	 - Aberto</option>
                        <option value="F" ${st === 'F' ? 'selected' : ''}>F - Pago</option>
                    </select>
                </td>
                <td>
                    <select name="p_meio[]" style="width:100%; border:none;">
                        <option value="BOLETO" ${p.reg_c141_meio === 'BOLETO' ? 'selected' : ''}>BOLETO</option>
                        <option value="PIX" ${p.reg_c141_meio === 'PIX' ? 'selected' : ''}>PIX</option>
                        <option value="DINHEIRO" ${p.reg_c141_meio === 'DINHEIRO' ? 'selected' : ''}>DINHEIRO</option>
                    </select>
                </td>
                <td><input type="date" name="p_venc[]" value="${p.reg_c141_dt_vcto}" style="width:100%; border:none;"></td>
                <td><input type="number" name="p_valor[]" class="p-valor" step="0.01" value="${p.reg_c141_vl_parc}" style="width:100%; border:none; text-align:right; font-weight:bold;" oninput="validarGrade()"></td>
                <td style="text-align:center"><button type="button" onclick="this.closest('tr').remove(); validarGrade()" style="color:red; border:none; background:none; cursor:pointer">X</button></td>
            `;
            document.getElementById('val_id_participante').value = p.reg_c141_cod_part;
            document.getElementById('val_nome_participante').value = p.reg_c141_nome;
        });
    }
    validarGrade();
    atualizarTotais();
}

function gerarParcelas() {
    const tipo = document.getElementById('val_tipo').value;
    const num = document.getElementById('val_numero').value;
    const codPart = document.getElementById('val_id_participante').value;
    const nomePart = document.getElementById('val_nome_participante').value;
    const liq = atualizarTotais();
    let qtd = parseInt(document.getElementById('val_qtd').value) || 1;
    
    const tbody = document.querySelector("#tabelaParcelas tbody");
    tbody.innerHTML = "";
    
    const vBase = Math.floor((liq / qtd) * 100) / 100;
    const resto = parseFloat((liq - (vBase * qtd)).toFixed(2));

    for (let i = 1; i <= qtd; i++) {
        let dt = new Date();
        dt.setMonth(dt.getMonth() + (i - 1));
        let vFinal = (i === qtd) ? (vBase + resto) : vBase;
        const row = tbody.insertRow();
        row.innerHTML = `
            <td class="col-id" style="font-weight:bold; color:#000080;">${tipo} ${num}/${i.toString().padStart(2, '0')}</td>
            <td><input type="text" name="p_cod_part[]" value="${codPart}" class="readonly" readonly style="width:100%; border:none;"></td>
            <td><input type="text" name="p_nome_part[]" value="${nomePart}" class="readonly" readonly style="width:100%; border:none;"></td>
            <td style="text-align:center">${i}</td>
            <td><select name="p_status[]" style="width:100%; border:none;"><option value="P" selected>P - Aberto</option></select></td>
            <td><select name="p_meio[]" style="width:100%; border:none;"><option value="BOLETO">BOLETO</option><option value="PIX">PIX</option><option value="DINHEIRO">DINHEIRO</option></select></td>
            <td><input type="date" name="p_venc[]" value="${dt.toISOString().split('T')[0]}" style="width:100%; border:none;"></td>
            <td><input type="number" name="p_valor[]" class="p-valor" step="0.01" value="${vFinal.toFixed(2)}" style="width:100%; border:none; text-align:right; font-weight:bold;" oninput="validarGrade()"></td>
            <td style="text-align:center"><button type="button" onclick="this.closest('tr').remove(); validarGrade()" style="color:red; border:none; background:none; cursor:pointer">X</button></td>
        `;
    }
    validarGrade();
}

async function gravarDados() {
    const valorLiquidoTitulo = atualizarTotais();
    
    let somaGrade = 0;
    const camposGrade = document.querySelectorAll('.p-valor');
    camposGrade.forEach(campo => {
        somaGrade += parseFloat(campo.value || 0);
    });

    if (valorLiquidoTitulo.toFixed(2) !== somaGrade.toFixed(2)) {
        alert(`Erro de Conciliação: Título (R$ ${valorLiquidoTitulo.toLocaleString('pt-BR', {minimumFractionDigits:2})}) != Grade (R$ ${somaGrade.toLocaleString('pt-BR', {minimumFractionDigits:2})}). Ajuste a grade.`);
        return; 
    }

    const consistente = await realizarConsistenciaPrevia();
    if (!consistente) return;

    const form = document.getElementById('financeiroForm');
    const formData = new FormData(form);

    try {
        const res = await fetch('processar_faturamento.php', { method: 'POST', body: formData });
        const json = await res.json();
        alert(json.message);
        
        if(json.status === 'sucesso') {
            document.getElementById('val_codigo').value = json.codigo;
        }
    } catch (e) {
        alert("Erro na comunicação com o servidor.");
    }
}

async function realizarConsistenciaPrevia() {
    const dadosParaValidar = {
        numero_pedido: document.getElementById('val_numero').value,
        cod_participante: document.getElementById('val_id_participante').value,
        valor_total: fFloat(document.getElementById('val_bruto').value)
    };

    if (!dadosParaValidar.numero_pedido) {
        alert("⚠️ Informe o número do título/pedido.");
        return false;
    }

    try {
        const response = await fetch('consistir_faturamento.php', {
            method: 'POST',
            headers: { 'Content-Type': 'application/json' },
            body: JSON.stringify(dadosParaValidar)
        });
        
        const res = await response.json();
        
        if (res.status === 'ok') {
            return true;
        } else {
            alert("❌ FALHA NA CONSISTÊNCIA:\n" + res.mensagem);
            return false;
        }
    } catch (e) {
        alert("🚫 Erro na consistência.");
        return false;
    }
}

// --- UTILITÁRIOS ---
function mascaraMoeda(i) {
    let v = i.value.replace(/\D/g, "");
    v = (v / 100).toFixed(2).replace(".", ",");
    i.value = "R$ " + v.replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1.");
}

function fFloat(v) { 
    return parseFloat(v.replace(/[^\d,]/g, "").replace(",", ".")) || 0; 
}

function atualizarTotais() {
    const bruto = fFloat(document.getElementById('val_bruto').value);
    const desc  = fFloat(document.getElementById('val_desc_v').value);
    const liq   = bruto - desc;

    const display = document.getElementById('display_liquido');
    if (display) {
        display.innerText = liq.toLocaleString('pt-BR', { minimumFractionDigits: 2 });
    }
    return liq;
}

function validarGrade() {
    let soma = 0;
    document.querySelectorAll('.p-valor').forEach(i => soma += parseFloat(i.value || 0));
    const liq = atualizarTotais();
    const d = document.getElementById('display_soma');
    d.innerText = soma.toLocaleString('pt-BR', {minimumFractionDigits:2});
    d.style.color = (soma.toFixed(2) === liq.toFixed(2)) ? "#008000" : "#b00000";
}

function reajustarSoma() {
    const liq = atualizarTotais();
    const campos = document.querySelectorAll('.p-valor');
    if(campos.length === 0) return;
    let parcial = 0;
    for(let i=0; i < campos.length - 1; i++) parcial += parseFloat(campos[i].value || 0);
    campos[campos.length - 1].value = (liq - parcial).toFixed(2);
    validarGrade();
}

function atualizarDescricao() {
    const t = document.getElementById('val_tipo').value;
    const n = document.getElementById('val_numero').value;
    document.getElementById('val_desc').value = n ? t + ' ' + n : "";
}

async function fecharFaturamento() {
    const id = document.getElementById('val_codigo').value;
    const nat = document.getElementById('val_natureza').value; // Captura o valor do campo Natureza
    
    if (!id) return alert("Grave o título antes de fechar.");
    if (!nat) return alert("Selecione uma Natureza antes de fechar."); // Validação obrigatória
    if (!confirm("Deseja realmente FECHAR este título?")) return;

    const formData = new FormData();
    formData.append('codigo', id);
    formData.append('natureza', nat); // Adiciona a natureza ao envio

    try {
        const res = await fetch('fechar_faturamento.php', { method: 'POST', body: formData });
        const json = await res.json();
        alert(json.message);
        if (json.status === 'sucesso') location.reload(); 
    } catch (e) {
        alert("Erro no fechamento.");
    }
}

async function apagarFaturamento() {
    const id = document.getElementById('val_codigo').value;
    if (!id) return alert("Selecione um título carregado.");
    if (!confirm("⚠️ Excluir permanentemente o título?")) return;

    const formData = new FormData();
    formData.append('codigo', id);

    try {
        const res = await fetch('excluir_faturamento.php', { method: 'POST', body: formData });
        const json = await res.json();
        alert(json.message);
        if (json.status === 'sucesso') window.location.reload();
    } catch (e) {
        alert("Erro ao excluir.");
    }
}
// Atualize a sua função buscarNatureza para abrir o ficheiro que enviou
function buscarNatureza() {
    const largura = 700, altura = 500;
    const esquerda = (screen.width - largura) / 2, topo = (screen.height - altura) / 2;
    window.open('busca_natureza.php', 'BuscaNatureza', `width=${largura},height=${altura},left=${esquerda},top=${topo},scrollbars=yes,resizable=yes`);
}
function definirNatureza(descricao, debito, credito) {
    // Leva o nome da natureza para o campo visível
    document.getElementById('val_natureza').value = descricao;
    
  
    
    console.log("Dados recebidos:", {descricao, debito, credito});
}
</script>
</body>
</html>