<?php
// 1. INCLUI A SUA CONEXÃO NATIVA (MySQLi)


include '../config.php';

// 1. INCLUI A SUA CONEXÃO NATIVA (MySQLi)
require_once __DIR__ . '/../configuracao/modelo.php';

if (!isset($mysqli) || $mysqli->connect_error) {
    die("Erro: Conexão com o banco de dados não estabelecida.");
}
$mysqli->set_charset("utf8mb4");

$mensagem = "";
$status = "";

// 2. PROCESSAMENTO DO FECHAMENTO AO SUBMETER O FORMULÁRIO
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['acao']) && $_POST['acao'] === 'processar_fechamento') {
    $cta_inicial   = $_POST['cta_inicial'];
    $cta_final     = $_POST['cta_final'];
    $cta_destino   = $_POST['cta_destino'];
    $data_fechto   = $_POST['data_fechamento'];
    
    if (empty($cta_inicial) || empty($cta_final) || empty($cta_destino) || empty($data_fechto)) {
        $mensagem = "Atenção: Todos os campos são obrigatórios para o encerramento.";
        $status = "erro";
    } else {
        // A. Busca o saldo atual líquido apenas das contas analíticas no intervalo estipulado
        $sqlSaldos = "SELECT reg_i250_cod_cta,
                        SUM(CASE WHEN reg_i250_ind_dc = 'D' THEN CAST(reg_i250_vl_dc AS DECIMAL(15,2)) ELSE 0 END) as total_debito,
                        SUM(CASE WHEN reg_i250_ind_dc = 'C' THEN CAST(reg_i250_vl_dc AS DECIMAL(15,2)) ELSE 0 END) as total_credito
                      FROM reg_i250
                      WHERE (ativo = 's' OR ativo = 'S') 
                        AND reg_i250_cod_cta BETWEEN ? AND ?
                      GROUP BY reg_i250_cod_cta";
        
        $stmtSaldos = $mysqli->prepare($sqlSaldos);
        $stmtSaldos->bind_param("ss", $cta_inicial, $cta_final);
        $stmtSaldos->execute();
        $resSaldos = $stmtSaldos->get_result();
        
        $lancamentos_gerados = 0;
        $total_geral_fechamento = 0;
        
        $contas_zerar = [];
        while ($reg = $resSaldos->fetch_assoc()) {
            $cod_cta = $reg['reg_i250_cod_cta'];
            $deb = (float)$reg['total_debito'];
            $cred = (float)$reg['total_credito'];
            
            // Saldo líquido (Débito - Crédito)
            $saldo_real = $deb - $cred; 
            
            if (abs($saldo_real) > 0.001) {
                $contas_zerar[] = [
                    'conta' => $cod_cta,
                    'saldo' => $saldo_real
                ];
                $total_geral_fechamento += abs($saldo_real);
            }
        }
        
        if (count($contas_zerar) === 0) {
            $mensagem = "Nenhum saldo pendente de zeramento foi encontrado no intervalo selecionado.";
            $status = "erro";
        } else {
            // INICIA TRANSAÇÃO CONTROLADA NO BANCO DE DADOS
            $mysqli->begin_transaction();
            
            try {
                // B. Cria o Lançamento Mestre na tabela `reg_i200`
                $num_lcto = rand(100000, 999999);
                $enum_sistema = "ENCERRAMENTO::1-" . date('dmYHis');
                $ativo_flag = "s";
                $ind_lcto = "E"; // E = Lançamento de Encerramento (Padrão SPED)
                
                $sqlI200 = "INSERT INTO reg_i200 (ativo, enumsistema, data, reg_i200_num_lcto, reg_i200_dt_lcto, reg_i200_vl_lcto, reg_i200_ind_lcto) 
                            VALUES (?, ?, ?, ?, ?, ?, ?)";
                $stmtI200 = $mysqli->prepare($sqlI200);
                $stmtI200->bind_param("sssisss", $ativo_flag, $enum_sistema, $data_fechto, $num_lcto, $data_fechto, $total_geral_fechamento, $ind_lcto);
                $stmtI200->execute();
                
                // Recupera o ID gerado na reg_i200 para usar na FK da reg_i250
                $id_reg_i200 = $mysqli->insert_id; 
                
                // C. Inserção das partidas dobradas na tabela `reg_i250`
                $sqlI250 = "INSERT INTO reg_i250 (ativo, enumsistema, data, reg_i250_cod_cta, reg_i250_vl_dc, reg_i250_ind_dc, reg_i250_hist, reg_i250_reg_i200) 
                            VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
                $stmtI250 = $mysqli->prepare($sqlI250);
                
                foreach ($contas_zerar as $item) {
                    $v_saldo = abs($item['saldo']);
                    
                    // Se o saldo original é DEVEDOR (>0), credita para zerar. Se for CREDOR (<0), debita.
                    $ind_dc_zeramento = ($item['saldo'] > 0) ? 'C' : 'D';
                    $txt_historico = "ZERAMENTO DE CONTA DE RESULTADO - PERIODO ENCERRAMENTO";
                    
                    // 1ª Partida: Zera o saldo da conta de resultado de origem
                    $stmtI250->bind_param("sssssssi", $ativo_flag, $enum_sistema, $data_fechto, $item['conta'], $v_saldo, $ind_dc_zeramento, $txt_historico, $id_reg_i200);
                    $stmtI250->execute();
                    
                    // 2ª Partida: Transfere a contrapartida para a conta de destino indicada (Passivo/Patrimônio Líquido)
                    $ind_dc_destino = ($ind_dc_zeramento === 'C') ? 'D' : 'C';
                    $txt_hist_dest = "TRANSF. SALDO RESULTADO - REF CONTA: " . $item['conta'];
                    
                    $stmtI250->bind_param("sssssssi", $ativo_flag, $enum_sistema, $data_fechto, $cta_destino, $v_saldo, $ind_dc_destino, $txt_hist_dest, $id_reg_i200);
                    $stmtI250->execute();
                    
                    $lancamentos_gerados++;
                }
                
                // Confirma todas as operações de lote no banco
                $mysqli->commit();
                $mensagem = "Sucesso: O encerramento foi processado! Total de {$lancamentos_gerados} contas de resultado foram liquidadas contra a conta do PL.";
                $status = "sucesso";
                
            } catch (Exception $e) {
                // Desfaz tudo se houver qualquer erro
                $mysqli->rollback();
                $mensagem = "Erro Crítico ao processar banco: " . $e->getMessage();
                $status = "erro";
            }
        }
    }
}

// 3. BUSCA AS CONTAS DIRETAMENTE DA TABELA REG_I050 PARA OS DROPDOWNS
$sqlCotasForm = "SELECT reg_i050_cod_cta, reg_i050_cta, reg_i050_ind_cta FROM reg_i050 ORDER BY reg_i050_cod_cta ASC";
$resCtas = $mysqli->query($sqlCotasForm);
$contasResultado = [];
$contasPatrimoniais = [];

while ($row = $resCtas->fetch_assoc()) {
    if ($row['reg_i050_cod_cta'][0] === '3') {
        $contasResultado[] = $row; // Grupo 3 (Resultado)
    } elseif ($row['reg_i050_cod_cta'][0] === '2') {
        $contasPatrimoniais[] = $row; // Grupo 2 (Passivo/PL)
    }
}
?>
<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <title>Rotina de Encerramento do Exercício (Zeramento)</title>
    <style>
        /* Ajuste estrutural para forçar ocupação total da viewport */
        html, body {
            height: 100%;
            margin: 0;
            padding: 0;
            background-color: #d4d0c8;
            font-family: "Tahoma", "Arial", sans-serif;
            font-size: 11px;
            color: #000000;
            overflow: hidden; /* Evita barras de rolagem globais duplicadas */
        }

        /* Container principal em tela cheia */
        .window-full {
            display: flex;
            flex-direction: column;
            height: 100%;
            box-sizing: border-box;
            padding: 4px;
        }

        /* Barra de Título superior */
        .header-title {
            background: linear-gradient(90deg, #000080, #1084d0);
            color: #ffffff;
            padding: 4px 8px;
            font-weight: bold;
            font-size: 12px;
            display: flex;
            justify-content: space-between;
            align-items: center;
            height: 24px;
            box-sizing: border-box;
            flex-shrink: 0;
        }

        /* Área de Trabalho Interna em Tela Cheia */
        .content-area {
            border-top: 2px solid #ffffff;
            border-left: 2px solid #ffffff;
            border-right: 2px solid #808080;
            border-bottom: 2px solid #808080;
            background-color: #d4d0c8;
            margin-top: 4px;
            flex-grow: 1;
            padding: 20px;
            box-sizing: border-box;
            overflow-y: auto; /* Rolagem apenas se o conteúdo interno estourar verticalmente */
        }

        /* Caixa do formulário expandida para preencher o espaço horizontal total de forma limpa */
        .dialog-box {
            max-width: 800px;
            width: 100%;
            background-color: #d4d0c8;
            border-top: 2px solid #ffffff;
            border-left: 2px solid #ffffff;
            border-right: 2px solid #808080;
            border-bottom: 2px solid #808080;
            margin: 10px auto;
            padding: 20px;
            box-sizing: border-box;
        }

        .dialog-header {
            font-weight: bold;
            font-size: 12px;
            margin-bottom: 18px;
            border-bottom: 1px solid #808080;
            padding-bottom: 6px;
        }

        .alert-box {
            padding: 10px;
            margin-bottom: 15px;
            border: 1px solid #808080;
            font-weight: bold;
        }
        .alert-sucesso { background-color: #008000; color: #ffffff; }
        .alert-erro { background-color: #a00000; color: #ffffff; }

        .form-container { display: table; width: 100%; }
        .form-group { display: table-row; }
        label.field-label { display: table-cell; width: 150px; padding: 8px 0; font-weight: bold; vertical-align: middle; }
        .input-cell { display: table-cell; padding: 6px 0; }

        select, input[type="date"] {
            width: 100%;
            font-family: "Tahoma", sans-serif;
            font-size: 11px;
            border-top: 1px solid #808080;
            border-left: 1px solid #808080;
            border-right: 1px solid #ffffff;
            border-bottom: 1px solid #ffffff;
            background-color: #ffffff;
            height: 24px;
            box-sizing: border-box;
            padding: 3px;
        }

        .footer-buttons { margin-top: 20px; text-align: right; border-top: 1px solid #808080; padding-top: 15px; }

        .btn-win2k {
            background-color: #d4d0c8;
            border-top: 1px solid #ffffff;
            border-left: 1px solid #ffffff;
            border-right: 1px solid #5a5a5a;
            border-bottom: 1px solid #5a5a5a;
            padding: 5px 24px;
            cursor: pointer;
            font-family: "Tahoma", sans-serif;
            font-size: 11px;
            font-weight: bold;
        }
        .btn-win2k:active { border-top: 1px solid #5a5a5a; border-left: 1px solid #5a5a5a; border-right: 1px solid #ffffff; border-bottom: 1px solid #ffffff; }

        .note-box { background-color: #ffffe1; border: 1px solid #808080; padding: 10px; margin-top: 20px; font-size: 10px; color: #404040; line-height: 15px; }
    </style>
</head>
<body>

<div class="window-full">
    <div class="header-title">
        <span>SISTEMA CONTÁBIL - Encerramento do Exercício (Mapeado via ECD/SPED)</span>
        <span>v1.6 - Fullscreen</span>
    </div>

    <div class="content-area">
        <div class="dialog-box">
            <div class="dialog-header">Parâmetros de Encerramento (Tabelas: reg_i200 / reg_i250)</div>
            
            <?php if (!empty($mensagem)): ?>
                <div class="alert-box alert-<?= $status ?>">
                    <?= htmlspecialchars($mensagem) ?>
                </div>
            <?php endif; ?>

            <form method="POST" action="">
                <input type="hidden" name="acao" value="processar_fechamento">
                
                <div class="form-container">
                    
                    <div class="form-group">
                        <label class="field-label">Conta Inicial (DRE):</label>
                        <div class="input-cell">
                            <select name="cta_inicial" required>
                                <option value="">-- Selecione a Conta Analítica de Origem --</option>
                                <?php foreach ($contasResultado as $cta): ?>
                                    <option value="<?= $cta['reg_i050_cod_cta'] ?>" <?= $cta['reg_i050_ind_cta'] === 'S' ? 'disabled style="background:#e2dfd9; font-weight:bold;"' : '' ?>>
                                        <?= $cta['reg_i050_cod_cta'] ?> - <?= htmlspecialchars($cta['reg_i050_cta']) ?>
                                    </option>
                                <?php endforeach; ?>
                            </select>
                        </div>
                    </div>

                    <div class="form-group">
                        <label class="field-label">Conta Final (DRE):</label>
                        <div class="input-cell">
                            <select name="cta_final" required>
                                <option value="">-- Selecione a Conta Analítica Termo --</option>
                                <?php foreach ($contasResultado as $cta): ?>
                                    <option value="<?= $cta['reg_i050_cod_cta'] ?>" <?= $cta['reg_i050_ind_cta'] === 'S' ? 'disabled style="background:#e2dfd9; font-weight:bold;"' : '' ?>>
                                        <?= $cta['reg_i050_cod_cta'] ?> - <?= htmlspecialchars($cta['reg_i050_cta']) ?>
                                    </option>
                                <?php endforeach; ?>
                            </select>
                        </div>
                    </div>

                    <div class="form-group">
                        <label class="field-label">Conta Destino (PL):</label>
                        <div class="input-cell">
                            <select name="cta_destino" required>
                                <option value="">-- Selecione a Conta Patrimonial do Passivo/PL --</option>
                                <?php foreach ($contasPatrimoniais as $cta): ?>
                                    <option value="<?= $cta['reg_i050_cod_cta'] ?>" <?= $cta['reg_i050_ind_cta'] === 'S' ? 'disabled style="background:#e2dfd9; font-weight:bold;"' : '' ?>>
                                        <?= $cta['reg_i050_cod_cta'] ?> - <?= htmlspecialchars($cta['reg_i050_cta']) ?>
                                    </option>
                                <?php endforeach; ?>
                            </select>
                        </div>
                    </div>

                    <div class="form-group">
                        <label class="field-label">Data de Fechamento:</label>
                        <div class="input-cell">
                            <input type="date" name="data_fechamento" value="<?= date('Y-m-d') ?>" required>
                        </div>
                    </div>

                </div>

                <div class="note-box">
                    <strong>Estrutura de Banco de Dados Validada:</strong> Os lançamentos serão persistidos utilizando a chave estrangeira correta <code>reg_i250_reg_i200</code> e a coluna de histórico mapeada como <code>reg_i250_hist</code>.
                </div>

                <div class="footer-buttons">
                    <button type="button" class="btn-win2k" style="margin-right: 5px;" onclick="if(confirm('Deseja cancelar?')) window.location.reload();">Cancelar</button>
                    <button type="submit" class="btn-win2k" onclick="return confirm('Confirma a execução do fechamento com base na estrutura real do banco?');">Executar Encerramento</button>
                </div>
            </form>
        </div>
    </div>
</div>

</body>
</html>