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

session_start();
$numero_da_tela = 18; // 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();
    }



// Garante que a variável $mysqli está disponível
if (!isset($mysqli) || $mysqli->connect_error) {
    die("Erro: Conexão com o banco de dados não estabelecida ou falhou.");
}

// Configura o charset para evitar problemas com acentuação nas contas
$mysqli->set_charset("utf8mb4");

// 2. CONTROLE DE FILTRO: EXIBIR CONTA COM SALDO ZERO?
$exibir_zero = isset($_GET['exibir_zero']) ? $_GET['exibir_zero'] : 'n';

// 3. BUSCA APENAS AS CONTAS DE RESULTADO (Grupo 3)
$sqlContas = "SELECT reg_i050_cod_cta, reg_i050_cta, reg_i050_nivel, reg_i050_ind_cta 
              FROM reg_i050 
              WHERE reg_i050_cod_cta LIKE '3%'
              ORDER BY reg_i050_cod_cta ASC";
$resultContas = $mysqli->query($sqlContas);
if (!$resultContas) {
    die("Erro ao buscar contas de resultado: " . $mysqli->error);
}

$planoContas = [];
while ($row = $resultContas->fetch_assoc()) {
    $planoContas[] = $row;
}

// 4. BUSCA OS SALDOS LANÇADOS NAS CONTAS ANALÍTICAS (REG_I250)
$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 LIKE '3%'
              GROUP BY reg_i250_cod_cta";
$resultSaldos = $mysqli->query($sqlSaldos);
if (!$resultSaldos) {
    die("Erro ao processar saldos da DRE: " . $mysqli->error);
}

$saldosAnaliticos = [];
while ($row = $resultSaldos->fetch_assoc()) {
    $saldosAnaliticos[$row['reg_i250_cod_cta']] = [
        'debito' => (float)$row['total_debito'],
        'credito' => (float)$row['total_credito']
    ];
}

// 5. PROCESSAMENTO HIERÁRQUICO DOS SALDOS PARA A DRE
$dre = [];
$total_receitas = 0;
$total_despesas_custos = 0;

foreach ($planoContas as $conta) {
    $cod = $conta['reg_i050_cod_cta'];
    $debito = 0;
    $credito = 0;

    if ($conta['reg_i050_ind_cta'] === 'A') {
        $debito = $saldosAnaliticos[$cod]['debito'] ?? 0;
        $credito = $saldosAnaliticos[$cod]['credito'] ?? 0;
    } else {
        foreach ($saldosAnaliticos as $codAnalitica => $valores) {
            if (strpos($codAnalitica, $cod . '.') === 0) {
                $debito += $valores['debito'];
                $credito += $valores['credito'];
            }
        }
    }

    /* LÓGICA DE EXIBIÇÃO DA DRE:
       - No grupo 3.1 (Receitas), o saldo normal é Credor. Fazemos: Crédito - Débito.
       - Nos grupos 3.2, 3.3, 3.4 e 3.8 (Custos/Despesas), o saldo normal é Devedor. Fazemos: Débito - Crédito.
    */
    $saldoExibicao = 0;
    $is_deducao = false;

    if (strpos($cod, '3.1') === 0) {
        // Grupo de Receitas (Aumenta o Resultado)
        $saldoExibicao = $credito - $debito;
        if ($conta['reg_i050_ind_cta'] === 'A' && $cod === '3.1.1.01.01') { 
            // Exemplo de conta de dedução dentro de receita se houver, caso contrário segue normal
        }
    } else {
        // Grupos de Custos e Despesas (Diminuem o Resultado)
        $saldoExibicao = $debito - $credito;
        $is_deducao = true; // Sinalizará visualmente como valor dedutivo
    }

    // Acumuladores globais para o Lucro/Prejuízo Líquido final (baseado no nível 1 "3")
    if ($cod === '3') {
        // O resultado líquido final do grupo 3 será: Créditos (Receitas) - Débitos (Despesas)
        $resultado_liquido_periodo = $credito - $debito;
    }

    // Filtragem dinâmica por saldo zero
    if ($exibir_zero === 's' || $debito > 0 || $credito > 0 || abs($saldoExibicao) > 0) {
        $dre[] = [
            'codigo' => $cod,
            'descricao' => $conta['reg_i050_cta'],
            'nivel' => $conta['reg_i050_nivel'],
            'tipo' => $conta['reg_i050_ind_cta'],
            'saldo' => $saldoExibicao,
            'is_deducao' => $is_deducao
        ];
    }
}
?>
<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <title>Demonstração do Resultado do Exercício (DRE)</title>
    <style>
        /* Mesma identidade visual sólida e adaptável do Balancete */
        html, body {
            height: 100%;
            margin: 0;
            padding: 0;
            background-color: #d4d0c8;
            font-family: "Tahoma", "Arial", sans-serif;
            font-size: 11px;
            color: #000000;
            overflow: hidden;
        }

        .window-full {
            display: block;
            height: 100%;
            box-sizing: border-box;
            padding: 4px;
        }

        .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;
        }

        .filter-bar {
            border: 1px solid #808080;
            background-color: #f1efe7;
            padding: 4px 8px;
            margin-top: 4px;
            margin-bottom: 4px;
            height: 30px;
            box-sizing: border-box;
            display: flex;
            align-items: center;
            justify-content: space-between;
        }

        .filter-form {
            display: flex;
            align-items: center;
            gap: 15px;
        }

        .checkbox-label {
            display: flex;
            align-items: center;
            gap: 4px;
            cursor: pointer;
            font-weight: bold;
        }

        .grid-container {
            overflow-y: auto;
            overflow-x: auto;
            height: calc(100% - 66px);
            border-top: 2px solid #808080;
            border-left: 2px solid #808080;
            border-right: 2px solid #ffffff;
            border-bottom: 2px solid #ffffff;
            background-color: #ffffff;
            box-sizing: border-box;
        }

        table.dre-table {
            width: 100%;
            border-collapse: collapse;
            background-color: #ffffff;
        }

        table.dre-table th {
            position: sticky;
            top: 0;
            background-color: #d4d0c8;
            color: #000000;
            font-weight: normal;
            border-right: 1px solid #808080;
            border-bottom: 2px solid #808080;
            border-top: 1px solid #ffffff;
            border-left: 1px solid #ffffff;
            padding: 5px 6px;
            text-align: left;
            z-index: 10;
        }

        table.dre-table td {
            padding: 5px 6px;
            border-right: 1px solid #e0e0e0;
            border-bottom: 1px solid #e0e0e0;
            white-space: nowrap;
        }

        .row-S { font-weight: bold; background-color: #f5f5f5; }
        .row-A { font-weight: normal; }
        
        /* Destaque especial para a linha de resultado líquido final */
        .row-resultado-final {
            font-weight: bold;
            background-color: #d4d0c8;
            border-top: 2px double #000000;
            border-bottom: 2px double #000000;
        }

        .num-col { 
            text-align: right; 
            font-family: "Courier New", monospace; 
            font-size: 12px; 
        }
        .center-col { text-align: center; }

        /* Identação estrutural em árvore */
        .indent-1 { padding-left: 6px !important; }
        .indent-2 { padding-left: 18px !important; }
        .indent-3 { padding-left: 30px !important; }
        .indent-4 { padding-left: 42px !important; }
        .indent-5 { padding-left: 54px !important; }

        .btn-print {
            background-color: #d4d0c8;
            border-top: 1px solid #ffffff;
            border-left: 1px solid #ffffff;
            border-right: 1px solid #5a5a5a;
            border-bottom: 1px solid #5a5a5a;
            padding: 1px 12px;
            cursor: pointer;
            font-size: 11px;
            height: 20px;
        }
        .btn-print:active {
            border-top: 1px solid #5a5a5a;
            border-left: 1px solid #5a5a5a;
            border-right: 1px solid #ffffff;
            border-bottom: 1px solid #ffffff;
        }

        .grid-container::-webkit-scrollbar { width: 16px; height: 16px; }
        .grid-container::-webkit-scrollbar-track { background: #efefef; border: 1px solid #808080; }
        .grid-container::-webkit-scrollbar-thumb {
            background: #d4d0c8;
            border-top: 1px solid #fff; border-left: 1px solid #fff;
            border-right: 1px solid #808080; border-bottom: 1px solid #808080;
        }

        @media print {
            html, body, .grid-container { overflow: visible !important; height: auto !important; }
            table.dre-table th { position: static !important; }
            .btn-print, .filter-bar { display: none !important; }
        }
    </style>
</head>
<body>

<div class="window-full">
    <div class="header-title">
        <span>SISTEMA CONTÁBIL - Demonstração do Resultado do Exercício (DRE)</span>
        <button class="btn-print" onclick="window.print()">Imprimir</button>
    </div>

    <div class="filter-bar">
        <form method="GET" id="formFiltro" class="filter-form">
            <label class="checkbox-label">
                <input type="checkbox" name="exibir_zero" value="s" 
                       onchange="document.getElementById('formFiltro').submit();"
                       <?= $exibir_zero === 's' ? 'checked' : '' ?>>
                Incluir contas com saldo zero
            </label>
        </form>

        <div>
            <strong>Estrutura DRE:</strong> Regime de Competência (Grupo 3)
        </div>
    </div>

    <div class="grid-container">
        <table class="dre-table">
            <thead>
                <tr>
                    <th style="width: 120px;">Código Estrutural</th>
                    <th>Nomenclatura da Conta de Resultado</th>
                    <th style="width: 50px;" class="center-col">Tipo</th>
                    <th style="width: 150px;" class="num-col">Valor Corrente</th>
                    <th style="width: 60px;" class="center-col">Efeito</th>
                </tr>
            </thead>
            <tbody>
                <?php foreach ($dre as $item): 
                    // Pula a exibição da raiz pura "3" aqui para colocarmos uma linha customizada no final
                    if ($item['codigo'] === '3') continue; 
                ?>
                    <tr class="row-<?= $item['tipo'] ?>">
                        <td><?= htmlspecialchars($item['codigo']) ?></td>
                        <td class="indent-<?= $item['nivel'] ?>">
                            <?= htmlspecialchars($item['descricao']) ?>
                        </td>
                        <td class="center-col"><?= $item['tipo'] ?></td>
                        <td class="num-col" style="color: <?= $item['is_deducao'] && $item['saldo'] > 0 ? '#b00000' : '#000000' ?>;">
                            <?php 
                                if ($item['saldo'] == 0) {
                                    echo '0,00';
                                } else {
                                    // Adiciona o sinal de menos visual se for uma despesa/custo operando normativamente
                                    $sinal = ($item['is_deducao'] && $item['saldo'] > 0) ? '-' : '';
                                    echo $sinal . number_format(abs($item['saldo']), 2, ',', '.');
                                }
                            ?>
                        </td>
                        <td class="center-col" style="font-weight: bold; color: <?= !$item['is_deducao'] ? '#006400' : '#a00000' ?>;">
                            <?= !$item['is_deducao'] ? '(+)' : '(-)' ?>
                        </td>
                    </tr>
                <?php endforeach; ?>

                <?php if (isset($resultado_liquido_periodo)): ?>
                    <tr class="row-resultado-final">
                        <td>3.9.9.99.99</td>
                        <td class="indent-1">
                            <?= $resultado_liquido_periodo >= 0 ? 'LUCRO LÍQUIDO DO EXERCÍCIO' : 'PREJUÍZO LÍQUIDO DO EXERCÍCIO' ?>
                        </td>
                        <td class="center-col">S</td>
                        <td class="num-col" style="color: <?= $resultado_liquido_periodo >= 0 ? '#006400' : '#b00000' ?>;">
                            <?= number_format(abs($resultado_liquido_periodo), 2, ',', '.') ?>
                        </td>
                        <td class="center-col">
                            <?= $resultado_liquido_periodo >= 0 ? 'LUCRO' : 'PREJ' ?>
                        </td>
                    </tr>
                <?php endif; ?>
            </tbody>
        </table>
    </div>
</div>

</body>
</html>