<?php
require '../conexao/conexao.php';
require '../conexao/acesso.php';
require '../configuacoes.php';

$resultmeta = null;
// Inicializa $queryString para evitar Notice quando o formulário não foi submetido
$queryString = '';

// Recuperando cidade combo filial: tenta Firebird e, se falhar, faz fallback para MySQL
$query_cidade_filial = "SELECT DISTINCT MUNIC FROM FC01000 fc WHERE fc.cdfil IN (SELECT cdfil FROM fc15100)";
$cidadefiliais = [];

$res_fb = @ibase_query($connection, $query_cidade_filial);
if ($res_fb === false) {
    // Query Firebird falhou (tabela ausente ou outro erro). Usa fallback MySQL
    // Carrega a classe de consultas em MySQL
    if (file_exists(__DIR__ . '/../configuracao/consulta_banco_dados.php')) {
        require_once __DIR__ . '/../configuracao/consulta_banco_dados.php';
        $consulta_bb = new ConsultaBancoDeDados();
        // get_cidades retorna array com id_cidade/nome_cidade — adaptamos para compatibility
        $cidades = $consulta_bb->get_cidades();
        foreach ($cidades as $c) {
            // Mantemos a mesma chave 'MUNIC' esperada no template
            $cidadefiliais[] = ['MUNIC' => $c['nome_cidade'] ?? $c['id_cidade'] ?? ''];
        }
    } else {
        // Sem fallback disponível — regista erro e deixa lista vazia
        error_log('Fallback get_cidades não disponível: ' . ibase_errmsg());
    }
} else {
    while ($row = ibase_fetch_assoc($res_fb)) {
        $cidadefiliais[] = $row;
    }
}

if (isset($_GET['form_submitted']) && $_GET['form_submitted'] == '1') {
    $cidade = $_GET['cidade'] ?? null;
    $ano = $_GET['ano'] ?? null;
    $mes = $_GET['mes'] ?? null;
    $periodo = $_GET['periodo'] ?? null;
    $DataInicial = $_GET['DataInicial'] ?? null;
    $DataFinal = $_GET['DataFinal'] ?? null;
    $filiais_condicao = $_GET['filial'] ?? [];
    //pegar dados das filiais
    if (!empty($filiais_condicao)) {
        if (is_array($filiais_condicao)) {
            // Se $filial for um array (vários valores selecionados), aplicamos array_map
            $filial = implode(",", array_map('intval', $filiais_condicao));
        } else {
            // Se $filial for uma string (apenas um valor selecionado), convertemos para inteiro diretamente
            $filial = intval($filiais_condicao);
        }
    } else {
        // Se $filiais_condicao estiver vazio, atribuímos o valor "Todos" a $filial
        $filial = "Todos";
    }
    // Se $filial não é um array, converta-o para um array
    $filialArray = explode(',', $filial);
    // Criar a string de consulta com os parâmetros
    $queryString = http_build_query([
        'cidade' => $cidade,
        'ano' => $ano,
        'mes' => $mes,
        'periodo' => $periodo,
        'filial' => $filialArray,
        'DataInicial' => $DataInicial,
        'DataFinal' => $DataFinal,
        'form_submitted' => '1'
    ]);

    // URL da página "caixa_vendedor.php" com os parâmetros da pesquisa
    $rankingPageUrl = "caixa_vendedor.php?$queryString";


    $qry_manipulado = " SELECT
            A1.codigo_empresa_padrao AS cdconre,
            CAST(COALESCE(SUM(A1.VALORVENDA_DESC), 0) AS NUMERIC(18,2)) AS SOma
            FROM ATENDIMENTO_A1 A1
            LEFT JOIN UTIL_REL_AG1 (1) AG ON AG.AG1_OP > 0
            LEFT JOIN ATENDIMENTO_CF CF ON A1.CODIGO_ATEND_FL = CF.CODIGO_ATEND_FL AND CF.CANCELAMENTO_CF IS NULL
            LEFT JOIN MEDICO M ON M.CODIGO = A1.CODIGO_MEDICO
            LEFT JOIN MEDICO_CR CR ON CR.CODIGO = M.CODIGO_CONSELHO_REGIONAL
            INNER JOIN FUNCIONARIO FU ON FU.CODIGO = IIF(AG.AG1_OP = 1, A1.CODIGO_FUNCIONARIO_COMISSAO, A1.AVIADA_CF)
            WHERE A1.TIPO_ATENDIMENTO = 1
		    AND CAST(A1.entregue_dt AS DATE) BETWEEN '$DataInicial' AND '$DataFinal'
		";

    if ($filial && $filial != "Todos") {
        $qry_manipulado .= " AND A1.CODIGO_EMPRESA_PADRAO IN ($filial) ";
    }

    $qry_manipulado .= " GROUP BY A1.codigo_empresa_padrao";


    $qry_revenda = " SELECT 
                A1.AVIADA_LJ AS cdconre,
                CAST(SUM(A3.valorvenda_desc) AS NUMERIC(18,2)) AS REVENDA_TOTAL
           FROM atendimento_a3 A3
           INNER JOIN atendimento_a1 A1 ON A3.codigo_atend_a1 = A1.codigo
           INNER JOIN estoque_geral EG ON A3.codigo_produto = EG.codigo
           INNER JOIN medico MD ON MD.codigo = A1.codigo_medico
           LEFT JOIN medico_cr CR ON CR.codigo = MD.codigo_conselho_regional
           WHERE A1.tipo_atendimento = 2
               AND A3.excluirproduto_cf IS NULL
               AND A1.cancelamento_lj IS NULL
               AND A3.QUANTIDADE > 0
               AND A1.PAGAR_COMISSAO_FUNCIONARIO = '-1'
               AND A1.STATUS_MOV = '-1'
               AND A3.codigo_produto NOT IN ('3024873', '3025044')
               AND EG.codigo_estoque_classificacao NOT IN (300002)
			   AND CAST(A1.entregue_dt AS DATE) BETWEEN '$DataInicial' AND '$DataFinal'
			   ";
			   
    if ($filial && $filial != "Todos") {
           $qry_revenda .= " AND A1.CODIGO_EMPRESA_PADRAO IN ($filial) ";
    }

    $qry_revenda .= " GROUP BY A1.AVIADA_LJ ";


    $qry_marca = " SELECT 
                A1.AVIADA_LJ AS cdconre,
                CAST(SUM(A3.valorvenda_desc) AS NUMERIC(18,2)) AS marca_propria_total
           FROM atendimento_a3 A3
           INNER JOIN atendimento_a1 A1 ON A3.codigo_atend_a1 = A1.codigo
           INNER JOIN estoque_geral EG ON A3.codigo_produto = EG.codigo
           INNER JOIN medico MD ON MD.codigo = A1.codigo_medico
           LEFT JOIN medico_cr CR ON CR.codigo = MD.codigo_conselho_regional
           WHERE A1.tipo_atendimento = 2
               AND A3.excluirproduto_cf IS NULL
               AND A1.cancelamento_lj IS NULL
               AND A3.QUANTIDADE > 0
               AND A1.PAGAR_COMISSAO_FUNCIONARIO = '-1'
               AND A1.STATUS_MOV = '-1'
               AND (A3.codigo_produto IN ('3024873', '3025044') OR EG.codigo_estoque_classificacao IN (300002))
			   AND CAST(A1.entregue_dt AS DATE) BETWEEN '$DataInicial' AND '$DataFinal'
			   ";
    if ($filial && $filial != "Todos") {
           $qry_marca .= " AND A1.CODIGO_EMPRESA_PADRAO IN ($filial)  ";
    }

    $qry_marca .= " GROUP BY A1.AVIADA_LJ"; 


    $qryResult = ibase_query($connection, $qry_manipulado);
    if (!$qryResult) {
        die("Erro na consulta SQL (Manipulado): " . ibase_errmsg());
    }

    $qryResultRevenda = ibase_query($connection, $qry_revenda);
    if (!$qryResultRevenda) {
        die("Erro na consulta SQL (Revenda): " . ibase_errmsg());
    }

    $qryResultMarca = ibase_query($connection, $qry_marca);
    if (!$qryResultMarca) {
        die("Erro na consulta SQL (Marca Própria): " . ibase_errmsg());
    }

   
    // Fechar a conexão com o banco de dados
    ibase_close($connection);
}


?>

<!DOCTYPE html>
<html lang="pt-br">
<?php
$pageTitle = "Consultar Caixas";
include('../geral/header.php');
?>

<body>

    <?php include('../geral/menu.php'); ?>

    <div class="wrapper candidato">
        <div class="container-fluid">

            <div class="card-box mt-3">
                <div class="row">

                    <div class="col-6 text-left">
                        <h4 class="page-title">Consultar Caixas</h4>
                    </div>

                    <div class="col-6 text-right">
                        <a href="../validacao/loja_detalhado/index.php?id=1&<?= $queryString ?>" class=" btn btn-light">
                            <i class="mdi mdi-pencil"></i> Caixa Detalhado
                        </a>
                    </div>

                    <div class="col-12">
                        <hr>
                    </div>

                    <div class="col-12">
                        <form method="get" action="" id="indexForm" onsubmit="return validarFormulario()">
                            <div class="form-row mb-3">
                                <div class="form-group col-6 col-md-3 col-lg-2">
                                    <label for="cidade" class="col-form-label">Cidade</label>
                                    <select id="cidade" name="cidade" class="form-control">
                                        <option value="Todos" <?php echo (!isset($cidade) || $cidade == "Todos") ? "selected" : ""; ?>>Todos</option>
                                        <?php foreach ($cidadefiliais as $item) : ?>
                                            <option value="<?php echo $item['MUNIC']; ?>" <?php echo (isset($cidade) && $cidade == $item['MUNIC']) ? "selected" : ""; ?>>
                                                <?php echo $item['MUNIC']; ?>
                                            </option>
                                        <?php endforeach; ?>
                                    </select>
                                </div>

                                <div class="form-group col-6 col-md-4 col-lg-2">
                                    <label for="filial" class="col-form-label">Filial</label>
                                    
                                    <select multiple id="filial" name="filial[]" class="form-control">
                                        <!-- Options will be filled dynamically -->
                                    </select>

                                </div>

                                <div class="form-group col-6 col-md-4 col-lg-2">
                                    <label for="periodo" class="col-form-label">Período</label>
                                    <select id="periodo" name="periodo" class="form-control">
                                        <option value="">Selecione</option>
                                        <option value="hoje" <?php echo (isset($periodo) && $periodo == 'hoje') ? 'selected' : ''; ?>>Hoje</option>
                                        <option value="ontem" <?php echo (isset($periodo) && $periodo == 'ontem') ? 'selected' : ''; ?>>Ontem</option>
                                        <option value="semana" <?php echo (isset($periodo) && $periodo == 'semana') ? 'selected' : ''; ?>>Esta Semana</option>
                                        <option value="mes" <?php echo (isset($periodo) && $periodo == 'mes') ? 'selected' : ''; ?>>Este Mês</option>
                                    </select>
                                </div>

                                <div class="col-2">

                                    <label for="DataInicial" class="col-form-label" oninput="validarCampo('DataInicial',this.value)">Data Inicial</label>
                                    <input type="date" id="DataInicial" name="DataInicial" class="form-control" value="<?php echo isset($DataInicial) ? $DataInicial : ''; ?>">
                                </div>

                                <div class="col-2">

                                    <label for="DataFinal" class="col-form-label" oninput="validarCampo('DataFinal',this.value)">Data Final</label>
                                    <input type="date" id="DataFinal" name="DataFinal" class="form-control" value="<?php echo isset($DataFinal) ? $DataFinal : ''; ?>">
                                </div>

                                <input type="hidden" name="form_submitted" value="1" />

                                <div class="col-12 text-right">
                                    <a href="index.php" class="btn btn-warning mr-2"><i class="mdi mdi-plus"></i> Limpar</a>
                                    <button type="submit" class="btn btn-primary"><i class="mdi mdi-magnify"></i> Pesquisar</button>
                                </div>
                            </div>
                        </form>
                    </div>

                    <?php
                    if (isset($_GET['form_submitted']) && $_GET['form_submitted'] == '1') { ?>

                        <div class="col-12">
                            <div style="display: flex; justify-content: space-between; align-items: center;">
                                <h6>Valores de Caixa</h6>
                            </div>
                            <a href="<?php echo $rankingPageUrl; ?>">
                                <table id="datatable-buttons" class="table table-striped table-bordered dt-responsive nowrap">
                                    <thead>
                                        <tr class="text-center">
                                            <th>Filial</th>
                                            <th>Manipulado</th>
                                            <th>Revenda</th>
                                            <th>Marca Própria</th>
                                            <th>Total</th>
                                        </tr>
                                    </thead>
                                    <tbody>

                                        <?php
                                        // Criar arrays associativos para armazenar os resultados
                                        // Criar arrays associativos para armazenar os resultados
                                        $dataManipulado = [];
                                        $dataRevenda = [];
                                        $dataMarca = [];

                                        while ($row = ibase_fetch_assoc($qryResult)) {
                                            $dataManipulado[$row['CDCONRE']] = $row['SOMA'];
                                        }

                                        while ($row = ibase_fetch_assoc($qryResultRevenda)) {
                                            $dataRevenda[$row['CDCONRE']] = $row['REVENDA_TOTAL'];
                                        }

                                        while ($row = ibase_fetch_assoc($qryResultMarca)) {
                                            $dataMarca[$row['CDCONRE']] = $row['MARCA_PROPRIA_TOTAL'];
                                        }

                                        // Inicializar totais
                                        $totalManipulado = 0;
                                        $totalRevenda = 0;
                                        $totalMarca = 0;

                                        // Calcular totais e gerar linhas da tabela
                                        foreach ($dataManipulado as $cdconre => $manipulado) {
                                            $revenda = $dataRevenda[$cdconre] ?? 0;
                                            $marca_propria = $dataMarca[$cdconre] ?? 0;
                                            $total = $manipulado + $revenda + $marca_propria;

                                            $totalManipulado += $manipulado;
                                            $totalRevenda += $revenda;
                                            $totalMarca += $marca_propria;
                                        ?>

                                            <tr class='text-center'>
                                                <td width='87'><?php echo htmlspecialchars($cdconre); ?></td>
                                                <td width='89'>
                                                    <div align='center'>R$ <?php echo htmlspecialchars(number_format($manipulado, 2, ',', '.')); ?></div>
                                                </td>
                                                <td width='89'>
                                                    <div align='center'>R$ <?php echo htmlspecialchars(number_format($revenda, 2, ',', '.')); ?></div>
                                                </td>
                                                <td width='89'>
                                                    <div align='center'>R$ <?php echo htmlspecialchars(number_format($marca_propria, 2, ',', '.')); ?></div>
                                                </td>
                                                <td width='89'>
                                                    <div align='center'>R$ <?php echo htmlspecialchars(number_format($total, 2, ',', '.')); ?></div>
                                                </td>
                                            </tr>

                                        <?php
                                        }
                                        ?>

                                        <tr class='text-center'>
                                            <td width='87'>
                                                <div align='center'><b>Total</b></div>
                                            </td>
                                            <td width='89'>
                                                <div align='center'><b>R$ <?php echo htmlspecialchars(number_format($totalManipulado, 2, ',', '.')); ?></b></div>
                                            </td>
                                            <td width='89'>
                                                <div align='center'><b>R$ <?php echo htmlspecialchars(number_format($totalRevenda, 2, ',', '.')); ?></b></div>
                                            </td>
                                            <td width='89'>
                                                <div align='center'><b>R$ <?php echo htmlspecialchars(number_format($totalMarca, 2, ',', '.')); ?></b></div>
                                            </td>
                                            <td width='89'>
                                                <div align='center'><b>R$ <?php echo htmlspecialchars(number_format($totalManipulado + $totalRevenda + $totalMarca, 2, ',', '.')); ?></b></div>
                                            </td>
                                        </tr>
                                       
                                    </tbody>
                                </table>

                        </div>

                    <?php } ?>

                </div>
            </div>

        </div> <!-- end container -->
    </div>

    <?php include('../geral/footer.php'); ?>
    <?php include('../geral/mensagens_modais.php'); ?>

    <script src="../../assets/js/vendor.min.js"></script>
    <script src="../../assets/libs/jquery-knob/jquery.knob.min.js"></script>
    <script src="../../assets/js/app.min.js"></script>
    <script src="../geral/javascript.js"></script>

    <script type="text/javascript">
        function showModal(modalId, title, message) {
            const modalElement = document.getElementById(modalId);
            const modal = new bootstrap.Modal(modalElement);
            modalElement.querySelector('.modal-title').textContent = title;
            modalElement.querySelector('.modal-body p').textContent = message;
            modal.show();
        }

        function formatDate(date) {
            const year = date.getFullYear();
            const month = String(date.getMonth() + 1).padStart(2, '0');
            const day = String(date.getDate()).padStart(2, '0');
            return `${year}-${month}-${day}`;
        }

        function getPeriodRange(periodo) {
            const today = new Date();

            if (periodo === 'hoje') {
                const formatted = formatDate(today);
                return { start: formatted, end: formatted };
            }

            if (periodo === 'ontem') {
                const yesterday = new Date(today);
                yesterday.setDate(yesterday.getDate() - 1);
                const formatted = formatDate(yesterday);
                return { start: formatted, end: formatted };
            }

            if (periodo === 'semana') {
                const currentDay = today.getDay();
                const diffToMonday = currentDay === 0 ? -6 : 1 - currentDay;
                const start = new Date(today);
                start.setDate(today.getDate() + diffToMonday);

                const end = new Date(start);
                end.setDate(start.getDate() + 6);

                return { start: formatDate(start), end: formatDate(end) };
            }

            if (periodo === 'mes') {
                const start = new Date(today.getFullYear(), today.getMonth(), 1);
                const end = new Date(today.getFullYear(), today.getMonth() + 1, 0);
                return { start: formatDate(start), end: formatDate(end) };
            }

            return null;
        }

        function updateDatesFromPeriod() {
            const periodo = document.getElementById('periodo').value;
            const dataInicial = document.getElementById('DataInicial');
            const dataFinal = document.getElementById('DataFinal');
            const range = getPeriodRange(periodo);

            if (!range) {
                return;
            }

            dataInicial.value = range.start;
            dataFinal.value = range.end;
            dataInicial.classList.remove('is-invalido');
            dataFinal.classList.remove('is-invalido');
        }

        function updatePeriodFromDates() {
            const periodo = document.getElementById('periodo');
            const dataInicial = document.getElementById('DataInicial').value;
            const dataFinal = document.getElementById('DataFinal').value;

            if (!dataInicial || !dataFinal) {
                periodo.value = '';
                return;
            }

            const periodos = ['hoje', 'ontem', 'semana', 'mes'];
            let periodoEncontrado = '';

            for (const item of periodos) {
                const range = getPeriodRange(item);
                if (range && range.start === dataInicial && range.end === dataFinal) {
                    periodoEncontrado = item;
                    break;
                }
            }

            periodo.value = periodoEncontrado;
        }

        document.addEventListener("DOMContentLoaded", function() {
            var form = document.getElementById("indexForm");
            var periodo = document.getElementById("periodo");
            var campoInicial = document.getElementById("DataInicial");
            var campoFinal = document.getElementById("DataFinal");

            periodo.addEventListener('change', updateDatesFromPeriod);
            campoInicial.addEventListener('change', updatePeriodFromDates);
            campoFinal.addEventListener('change', updatePeriodFromDates);

            updatePeriodFromDates();

            form.addEventListener("submit", function(event) {
                var dataInicial = campoInicial.value.trim();
                var dataFinal = campoFinal.value.trim();

                // Verificar se os campos de data não estão vazios
                if (dataInicial === '' || dataFinal === '') {
                    showModal('exampleModal', 'Informação', 'Por Favor informar um período válido.');
                    campoInicial.classList.add('is-invalido');
                    campoFinal.classList.add('is-invalido');
                    event.preventDefault(); // Impede o envio do formulário
                    return; // Encerra a execução da função
                }

                // Converter as datas para objetos Date
                dataInicial = new Date(dataInicial);
                dataFinal = new Date(dataFinal);

                // Verificar se a data inicial é maior que a final
                if (dataInicial > dataFinal) {
                    showModal('exampleModal', 'Informação', 'A data inicial não pode ser maior que a data final.');
                    campoInicial.classList.add('is-invalido');
                    campoFinal.classList.add('is-invalido');
                    event.preventDefault(); // Impede o envio do formulário
                } else {
                    // Remove a classe de invalidez se as datas estiverem corretas
                    campoInicial.classList.remove('is-invalido');
                    campoFinal.classList.remove('is-invalido');
                }
            });
        });

        // Verifica a URL quando a página é carregada
        function verificarErroNaURL() {
            const urlParams = new URLSearchParams(window.location.search);
            const errorMessage = urlParams.get('error');
            if (errorMessage) {
                showModal('exampleModal', 'Erro', errorMessage);
            }
        }

        window.onload = verificarErroNaURL;
    </script>


    <link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.1.0-beta.1/css/select2.min.css" rel="stylesheet" />

    <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.1.0-beta.1/js/select2.min.js"></script>
    <link href="../../assets/css/style.css" rel="stylesheet" />
    <script>
        $(document).ready(function() {
            // Função para preencher o combo de filiais com Select2
            function carregarFiliais(cidade) {
                $.ajax({
                    url: 'get_filiais.php',
                    type: 'POST',
                    dataType: 'json',
                    data: {
                        cidade: cidade
                    },
                    success: function(data) {
                        $('#filial').empty().select2({
                            placeholder: 'Selecione uma ou mais filiais',
                            data: data.map(function(item) {
                                return {
                                    id: item.CDFIL,
                                    text: item.DESCRFIL
                                };
                            })
                        });

                        // Recuperar filiais selecionadas do localStorage, se existirem
                        var filiaisSelecionadas = JSON.parse(localStorage.getItem('filiaisSelecionadas')) || [];

                        // Selecionar as filiais recuperadas
                        $('#filial').val(filiaisSelecionadas).trigger('change');
                    },
                    error: function(xhr, status, error) {
                        alert('Erro na chamada AJAX: ' + status + ' - ' + error);
                    }
                });
            }

            // Ao carregar a página, chama a função para preencher o combo de filiais com base na cidade inicial
            carregarFiliais($('#cidade').val());

            // Ao alterar a cidade, chama a função para preencher o combo de filiais com base na nova cidade selecionada
            $('#cidade').change(function() {
                const cidade = $(this).val();
                carregarFiliais(cidade);
            });

            // Ao selecionar ou deselecionar uma filial, atualiza o localStorage com as filiais selecionadas
            $('#filial').on('change', function() {
                var filiaisSelecionadas = $(this).val() || [];
                localStorage.setItem('filiaisSelecionadas', JSON.stringify(filiaisSelecionadas));
            });

            // Checkbox para selecionar todas as filiais
            $("#select_todos").click(function() {
                if ($(this).is(':checked')) {
                    $('#filial option').prop('selected', true);
                    $('#filial').trigger('change');
                } else {
                    $('#filial option').prop('selected', false);
                    $('#filial').trigger('change');
                }
            });
        });


        // Função para validar o formulário
        function validarFormulario(event) {
            const datasValidas = validarDatas('DataInicial', 'DataFinal');
            if (!datasValidas) {
                event.preventDefault(); // Impede o envio do formulário se houver erros
            }
            return datasValidas;
        }

        // Adicionar event listeners para remover a classe 'is-invalido' quando houver mudanças nos campos
        document.addEventListener("DOMContentLoaded", function() {
            const dataInicial = document.getElementById('DataInicial');
            const dataFinal = document.getElementById('DataFinal');

            dataInicial.addEventListener('input', function() {
                dataInicial.classList.remove('is-invalido');
            });

            dataFinal.addEventListener('input', function() {
                dataFinal.classList.remove('is-invalido');
            });

            // Adicionar validação ao submeter o formulário
            const form = document.getElementById("indexForm");
            form.addEventListener("submit", validarFormulario);
        });
    </script>
    <style>
        .is-invalido {
            box-shadow: 0 0 5px red !important;
        }
    </style>
</body>

</html>