<?php
require '../conexao/conexao.php';
//require '../sessao.php';
require '../conexao/acesso.php';
require '../configuacoes.php';
require '../configuracao/consulta_banco_dados.php';
require '../configuracao/filtros.php';
require '../logs/gera-log.php';

gerarLog(
    1, // tipo de log (acesso)
    $basePath, // módulo
    $_SESSION['CodUsuario'],
    $_SESSION['NomeUsuario']
);

$consulta_bb = new ConsultaBancoDeDados();
$filtros = new Filtros();
$filiais = $consulta_bb->get_filiais();
$ids = array_column($filiais, 'ID');
$ids_filial = implode(',', $ids);
$filialselect = !empty($_GET['filial']) ? $_GET['filial'] : null;
$filial = explode(',', $filialselect);

$filial = array_filter($filial, function ($item) {
    return $item !== 'x';
});
$filial = array_values($filial);
$filial = implode(',', $filial);

$result = null; // Definindo $result como null
//recuperando combo filial
// $query_filial = "SELECT cdfil, DESCRFIL FROM FC01000 fc WHERE fc.cdfil IN (SELECT cdfil FROM fc15100)";
// $result_filial = ibase_query($connection, $query_filial);

// if (!$result_filial) {
//     die('Erro na consulta: ' . ibase_errmsg());
// }

// $filiais = [];
// while ($row = ibase_fetch_assoc($result_filial)) {
//     $filiais[] = $row;
// }

if (isset($_GET['pesquisar'])) {

    gerarLog(
        5, // tipo de log (acesso)
        $basePath, // módulo
        $_SESSION['CodUsuario'],
        $_SESSION['NomeUsuario']
    );

    function calcularPeriodo($numeroMeses)
    {
        // Obter o ano e o mês atuais
        $anoAtual = date('Y');
        $mesAtual = date('m') - 1;

        // Calcular o ano e o mês iniciais com base no número de meses escolhido pelo usuário
        $anoInicial = $anoAtual;
        $mesInicial = $mesAtual - $numeroMeses + 1;

        // Array para armazenar os meses e o número de dias em cada um
        $mesesComDias = [];



        // Excluir o mês atual do cálculo
        if ($mesInicial <= 0) {
            $mesInicial += 12; // Se o mês inicial for menor ou igual a zero, adicione 12 para ajustar para o ano anterior
            $anoInicial--; // Diminua um ano
        }

        // Array para armazenar os meses e o número de dias em cada um
        $mesesComDias = [];

        // Loop pelos meses incluídos no período
        for ($i = 0; $i < $numeroMeses; $i++) {
            $mes = ($mesInicial + $i) % 12;
            if ($mes == 0) $mes = 12; // Janeiro é representado por 1, não 0
            $ano = $anoInicial + floor(($mesInicial + $i - 1) / 12);

            $ultimoDia = date('t', strtotime("$ano-$mes-01")); // Obter o último dia do mês

            $mesesComDias[] = [
                'mes' => $mes,
                'ano' => $ano,
                'dias' => $ultimoDia
            ];
        }

        // Formatar os valores antes de retornar
        $anoAtualFormatado = sprintf('%04d', $anoAtual);
        $mesAtualFormatado = sprintf('%02d', $mesAtual);
        $anoInicialFormatado = sprintf('%04d', $anoInicial);
        $mesInicialFormatado = sprintf('%02d', $mesInicial);

        // Retornar os meses e o período
        return [
            'anoAtual' => $anoAtualFormatado,
            'mesAtual' => $mesAtualFormatado,
            'anoInicial' => $anoInicialFormatado,
            'mesInicial' => $mesInicialFormatado,
            'mesesComDias' => $mesesComDias
        ];
    }
    // Obtendo os parâmetros
    $meses = $_GET['meses'] ?? null;

    // Calculando o período
    $periodo = calcularPeriodo($meses);

    // Inicializando variáveis para o cálculo da média
    $totalDias = 0;
    $numMeses = count($periodo['mesesComDias']);
    $anoAtualFormatado =  $periodo['anoAtual'];
    $mesAtualFormatado = $periodo['mesAtual'];
    $anoInicialFormatado = $periodo['anoInicial'];
    $mesInicialFormatado =  $periodo['mesInicial'];


    // Restante do código permanece inalterado...
    //echo  $periodo['anoAtual'];
    //echo '--' ;
    //echo  $periodo['mesAtual'];
    //echo '--' ;
    //echo $periodo['anoInicial'];
    //echo '--' ;
    //echo  $periodo['mesInicial'];


    // Iterando sobre os meses e dias
    foreach ($periodo['mesesComDias'] as $dias) {
        //  echo "Mês: " . $dias['mes'] . "/" . $dias['ano'] . " - Dias: " . $dias['dias'] . "<br>";
        $totalDias += $dias['dias']; // Adiciona os dias do mês ao total
    }

    // Calcula a média
    if ($numMeses > 0) {
        $mediaDias = $totalDias / $numMeses;
        // echo "Média de dias por mês: " . $mediaDias;
    }

    // Recebe parâmetros via GET (ou POST, adapte conforme sua aplicação)
    $nome_produto = $_GET['nome_produto'] ?? '';
    $estoque_min = $_GET['estoque_min'] ?? null;
    $valor_compra_min = $_GET['valor_compra_min'] ?? null;
    $saidas_min = $_GET['saidas_min'] ?? null;
    $data_inicial = $_GET['data_inicial'] ?? '';
    $data_final = $_GET['data_final'] ?? '';

    // Função para validar formato de data 'YYYY-MM-DD'
    function validarData($data)
    {
        $d = DateTime::createFromFormat('Y-m-d', $data);
        return $d && $d->format('Y-m-d') === $data;
    }

    // Define período para filtro, usando datas válidas ou padrão (mês atual)
    $data_inicial_valida = validarData($data_inicial) ? $data_inicial : date('Y-m-01');
    $data_final_valida = validarData($data_final) ? $data_final : date('Y-m-t');

    // Escapa apóstrofos para string que será concatenada no SQL
    function firebird_escape_string($str)
    {
        return str_replace("'", "''", $str);
    }

    // Monta consulta SQL
    $sql_base = "
    SELECT
        E.CODIGO || '-' || E.NOMEFANTASIA AS CAMPO1,
        EH.CODIGO_PRODUTO,
        EG.NOMEPRODUTO,
        EH.ESTOQUE_MIN,
        EH.ESTOQUE_MAX,
        EG.valorcompra,
        EH.SALDO,
        CAST(EH.GASTO AS NUMERIC(18,2)) AS SAIDAS
    FROM UTIL_ESTOQUE_EH(0,1, '$data_inicial_valida', '$data_final_valida') EH
    INNER JOIN ESTOQUE_GERAL EG ON EG.CODIGO = EH.CODIGO_PRODUTO
    INNER JOIN EMPRESA E ON E.CODIGO = EH.CODIGO_EMPRESA
    WHERE 1=1
    ";

    // Aplica filtros dinâmicos

    if (!empty($filial)) {
        $sql_base .= "  AND E.CODIGO IN ($filial)";
    }
    if (!empty($nome_produto)) {
        $nome_produto_esc = firebird_escape_string($nome_produto);
        $sql_base .= " AND EG.NOMEPRODUTO LIKE '%$nome_produto_esc%'";
    }


    if (isset($estoque_min) && is_numeric($estoque_min)) {
        $sql_base .= " AND EH.ESTOQUE_MIN >= " . floatval($estoque_min);
    }

    if (isset($valor_compra_min) && is_numeric($valor_compra_min)) {
        $sql_base .= " AND EG.valorcompra >= " . floatval($valor_compra_min);
    }

    if (isset($saidas_min) && is_numeric($saidas_min)) {
        $sql_base .= " AND CAST(EH.GASTO AS NUMERIC(18,2)) >= " . floatval($saidas_min);
    }

    $sql_base .= "
    ORDER BY
        EH.GASTO DESC,
        EG.NOMEPRODUTO,
        EH.CODIGO_EMPRESA
    ";

    // Executa a query (ajuste $connection para sua conexão Firebird)
    $result = ibase_query($connection, $sql_base);

    if (!$result) {
        die('Erro na consulta: ' . ibase_errmsg());
    }
}

?>

<style>
    .dataTables_length,
    .dataTables_filter {
        margin-bottom: 0 !important;
    }

    .dataTables_info {
        padding-top: 10px;
    }

    .dataTables_paginate {
        padding-top: 10px;
    }

    /* Estilização da caixa de cópia do DataTables */
    div.dt-button-info {
        position: fixed;
        top: 50%;
        left: 50%;
        width: 350px !important;
        margin-top: -100px;
        margin-left: -175px !important;
        background-color: #2c3e50 !important; /* Fundo azul escuro/cinza moderno */
        color: #ffffff !important; /* Texto branco */
        border: none !important;
        box-shadow: 0 10px 25px rgba(0,0,0,0.2) !important;
        border-radius: 8px !important;
        text-align: center;
        z-index: 9999 !important;
        padding: 25px !important;
    }

    /* Estilo do Título ("Cópia bem sucedida" ou o que você definir) */
    div.dt-button-info h2 {
        background: transparent !important;
        color: #ffffff !important;
        border-bottom: 1px solid rgba(255,255,255,0.1) !important;
        margin: 0 0 15px 0 !important;
        padding: 0 0 15px 0 !important;
        font-size: 1.3rem !important;
        font-weight: 600 !important;
    }

    /* Estilo do subtítulo (quantidade de linhas copiadas) */
    div.dt-button-info > div {
        color: #bdc3c7 !important;
        font-size: 1rem !important;
    }
</style>

<style>
    div.dataTables_wrapper div.dataTables_length {
        padding-top: 10px;
    }
</style>

<style>
    /* Garante alinhamento bonito e espaçamento */
    div.dataTables_wrapper div.dataTables_length,
    div.dataTables_wrapper div.dataTables_info,
    div.dataTables_wrapper div.dataTables_paginate {
        margin: 0 !important;
        padding: 0 !important;
    }

    div.dataTables_wrapper .text-center {
        text-align: center !important;
    }

    div.dataTables_wrapper .text-end {
        text-align: right !important;
    }
</style>

<!DOCTYPE html>
<html lang="pt-br">
<?php
$pageTitle = "Gestão de Estoque"; // Definir o título da página aqui
include('../geral/header.php');
?>

<body>

    <!-- Navigation Bar-->
    <?php
    include('../geral/menu.php');
    ?>
    <!-- End Navigation Bar-->

    <!-- ============================================================== -->
    <!-- Start Page Content here -->
    <!-- ============================================================== -->

    <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 Produtos</h4>

                    </div>

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

                    <div class="col-12">
                        <form method="get" action="" onsubmit="return validarFormulario();">
                            <div class="form-row mb-3">

                                <?php echo $filtros->filtroFilialSimples($filialselect, $filiais); ?>

                                <!-- Novo: Nome do Produto -->
                                <div class="form-group col-6 col-md-4 col-lg-2">
                                    <label for="nome_produto" class="col-form-label">Nome do Produto</label>
                                    <input type="text" class="form-control" id="nome_produto" name="nome_produto" placeholder="Digite nome do produto" value="<?php echo isset($nome_produto) ? htmlspecialchars($nome_produto) : ''; ?>">
                                </div>

                                <!-- Novo: Estoque Mínimo -->
                                <!-- <div class="form-group col-6 col-md-4 col-lg-2">
                                    <label for="estoque_min" class="col-form-label">Estoque Mínimo</label>
                                    <input type="number" step="0.01" class="form-control" id="estoque_min" name="estoque_min" placeholder="Estoque mínimo" value="<?php echo isset($estoque_min) ? htmlspecialchars($estoque_min) : ''; ?>">
                                </div> -->

                                <!-- Novo: Valor de Compra (mínimo) -->
                                <!-- <div class="form-group col-6 col-md-4 col-lg-2">
                                    <label for="valor_compra_min" class="col-form-label">Valor Compra Mínimo</label>
                                    <input type="number" step="0.01" class="form-control" id="valor_compra_min" name="valor_compra_min" placeholder="Valor compra mínimo" value="<?php echo isset($valor_compra_min) ? htmlspecialchars($valor_compra_min) : ''; ?>">
                                </div> -->

                                <!-- Novo: Saídas (mínimo) -->
                                <!-- <div class="form-group col-6 col-md-4 col-lg-2">
                                    <label for="saidas_min" class="col-form-label">Saídas Mínimas</label>
                                    <input type="number" step="0.01" class="form-control" id="saidas_min" name="saidas_min" placeholder="Saídas mínimas" value="<?php echo isset($saidas_min) ? htmlspecialchars($saidas_min) : ''; ?>">
                                </div> -->

                                <div class="form-group col-6 col-md-4 col-lg-2">
                                    <label for="cliente" class="col-form-label">Data inicial:</label>
                                    <input type="date" class="form-control" id="data_inicial" name="data_inicial" placeholder="Cliente" required value="<?php echo isset($data_inicial) ? htmlspecialchars($data_inicial) : ''; ?>">

                                </div>

                                <div class="form-group col-6 col-md-4 col-lg-2">
                                    <label for="cliente" class="col-form-label">Data final:</label>
                                    <input type="date" class="form-control" id="data_final" require="require" name="data_final" required value="<?php echo $data_final ?? ''; ?>">

                                </div>

                                <div class="col-6 col-md-8 col-lg-4 d-flex mt-2" style="align-items:center;justify-content: end;">
                                    <div>
                                        <a href="index.php" class="btn btn-warning mr-2"><i class="mdi mdi-plus"></i> Limpar</a>
                                    </div>
                                    <div>
                                        <button name="pesquisar" type="submit" class="btn btn-primary"><i class="mdi mdi-magnify"></i> Pesquisar</button>
                                    </div>
                                </div>

                        </form>
                    </div>
                </div>
                <?php
                if (isset($_GET['pesquisar'])) { ?>
                    <div class="col-12">
                        <h6>Lista de Produtos</h6>

                        <div class="row">
                            <div class="col-12">
                                <?php
                                $numMeses = 1; // ou valor recebido do formulário validado

                                // Calcula média de dias nos últimos $numMeses meses a partir do mês atual
                                $ano = date('Y');
                                $mes = date('n');
                                $totalDias = 0;

                                // Função para formatar os valores de saída
                                function formatSaidas($valor)
                                {
                                    return ($valor > 0 && $valor < 0.1)
                                        ? number_format($valor, 5, ',', '.')
                                        : number_format($valor, 2, ',', '.');
                                }

                                for ($i = 0; $i < $numMeses; $i++) {
                                    $anoCalculado = $ano;
                                    $mesCalculado = $mes - $i;
                                    while ($mesCalculado < 1) {
                                        $mesCalculado += 12;
                                        $anoCalculado--;
                                    }
                                    $totalDias += cal_days_in_month(CAL_GREGORIAN, $mesCalculado, $anoCalculado);
                                }

                                $mediaDias = $totalDias / $numMeses;



                                ?>

                                <table id="minhaTabela" class="table table-bordered table-hover table-sm" style="width:100%;">
                                    <thead class="thead-light">
                                        <tr>
                                            <th>Produto</th>
                                            <th>Código</th>
                                            <th>Filial</th>
                                            <th>Estoque Minimo</th>
                                            <th>Estoque Maximo</th>
                                            <th>Qtd Disponivel</th>
                                            <th>Saídas</th>
                                            <th>Preço Compra</th>
                                            <th>Média Saídas Mês</th>
                                            <th>Média Saídas diária</th>
                                            <th>Dias de Estoque</th>
                                        </tr>
                                    </thead>
                                    <tbody>
                                        <?php
                                        $hasResults = false;

                                        if ($result) {
                                            while ($row = ibase_fetch_assoc($result)) {
                                                $row['NOMEPRODUTO'] = mb_convert_encoding($row['NOMEPRODUTO'], 'UTF-8', 'ISO-8859-1');

                                                $preco_compra_float = (float) $row['VALORCOMPRA'];
                                                $preco_compra_formatado = formatSaidas($preco_compra_float);

                                                $saidas = (float) $row['SAIDAS'];
                                                $saidas_formatado = formatSaidas($saidas);

                                                // Para cálculo, evita divisão por zero usando os valores já definidos $numMeses e $mediaDias
                                                $saidas_mes = $saidas;
                                                $saidas_diarias = $saidas / $mediaDias;

                                                $hasResults = true;

                                                echo '<tr>';
                                                echo '<th class="col-2" scope="row">' . htmlspecialchars($row['NOMEPRODUTO']) . '</th>';
                                                echo '<th scope="row">' . htmlspecialchars($row['CODIGO_PRODUTO']) . '</th>';
                                                echo '<td>' . htmlspecialchars($row['CAMPO1']) . '</td>';
                                                echo '<td data-order="' . $row['ESTOQUE_MIN'] . '">' . number_format($row['ESTOQUE_MIN'], 2, ',', '.') . '</td>';
                                                echo '<td data-order="' . $row['ESTOQUE_MAX'] . '">' . number_format($row['ESTOQUE_MAX'], 2, ',', '.') . '</td>';
                                                echo '<td data-order="' . $row['SALDO'] . '">' . number_format($row['SALDO'], 2, ',', '.') . '</td>';
                                                echo '<td data-order="' . $saidas . '">' . $saidas_formatado . '</td>';
                                                echo '<td data-order="' . $preco_compra_float . '">R$ ' . $preco_compra_formatado . '</td>';
                                                echo '<td data-order="' . ($saidas_mes / $numMeses) . '">' . formatSaidas($saidas_mes / $numMeses) . '</td>';
                                                echo '<td data-order="' . ($saidas_diarias / $numMeses) . '">' . formatSaidas($saidas_diarias / $numMeses) . '</td>';

                                                if ($row['SALDO'] != 0 && $row['SAIDAS'] != 0) {
                                                    $dias_estoque = $row['SALDO'] / (($row['SAIDAS'] / $numMeses) / $mediaDias);
                                                    $resultado_formatado = number_format($dias_estoque, 2, ',', '.');
                                                } else {
                                                    $dias_estoque = 0;
                                                    $resultado_formatado = number_format($dias_estoque, 2, ',', '.');
                                                }

                                                echo '<td data-order="' . $dias_estoque . '">' . $resultado_formatado . '</td>';
                                                echo '</tr>';
                                            }
                                        }

                                        if (!$hasResults) {
                                            echo "<tr><td colspan='10' class='text-center'>Sem resultado para a consulta</td></tr>";
                                        }
                                        ?>
                                    </tbody>
                                </table>

                            </div>
                        </div>
                    </div>
                <?php } ?>
            </div>
        </div> <!-- end container -->
    </div>

    <!-- end wrapper -->

    <!-- ============================================================== -->
    <!-- End Page content -->
    <!-- ============================================================== -->
    <!-- Footer Start -->
    <?php
    include('../geral/footer.php');
    ?>
    <!-- end Footer -->

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

    <!-- Vendor js -->
    <script src="../../assets/js/vendor.min.js"></script>

    <!-- knob plugin -->
    <script src="../../assets/libs/jquery-knob/jquery.knob.min.js"></script>
    <!-- App js-->
    <script src="../../assets/js/app.min.js"></script>

</body>

</html>

<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://cdn.datatables.net/1.11.3/js/jquery.dataTables.min.js"></script>
<script src="https://cdn.datatables.net/1.11.3/js/dataTables.bootstrap5.min.js"></script>
<link rel="stylesheet" href="https://cdn.datatables.net/1.11.3/css/dataTables.bootstrap5.min.css">


<script>
    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 validarCampo(id) {
        const campo = document.getElementById(id);
        const valor = campo.value.trim();
        let campoValido = true;

        if (!valor || valor === 'Selecione' || valor === 'Todos') {
            campoValido = false;
            campo.classList.add('is-invalido');
        } else {
            campo.classList.remove('is-invalido');
        }
        return campoValido;
    }


    function validarFormulario() {
        //   const funcionarioValido = validarCampo('funcionario');
        let camposValidos = true;

        // if (!funcionarioValido) {
        const mesesValido = validarCampo('meses');


        camposValidos = mesesValido;
        //  }

        if (!camposValidos) {
            showModal('exampleModal', 'Informação', 'O campo Meses de Cálculo deve estar preenchido  para realizar a consulta.');
        }

        return camposValidos;
    }


    function verificarErroNaURL() {
        const urlParams = new URLSearchParams(window.location.search);
        const errorMessage = urlParams.get('error');
        if (errorMessage) {
            showModal('exampleModal', 'Erro', errorMessage);
        }
    }

    window.onload = verificarErroNaURL;
</script>


<script src="https://cdn.datatables.net/buttons/2.0.1/js/dataTables.buttons.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.1.3/jszip.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.66/pdfmake.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.66/vfs_fonts.js"></script>
<script src="https://cdn.datatables.net/buttons/2.0.1/js/buttons.html5.min.js"></script>

<script src="../geral/javascript.js"></script>

<link rel="stylesheet" href="https://cdn.datatables.net/buttons/2.0.1/css/buttons.dataTables.min.css">

<link rel="stylesheet" href="../../assets/css/resetedatatable.css">
<script>
    $(document).ready(function() {
        var order = [
            [0, "asc"]
        ];

        $('#minhaTabela').DataTable({
            "language": {
                "url": "https://cdn.datatables.net/plug-ins/1.10.21/i18n/Portuguese-Brasil.json"
            },
            "order": order,
            "ordering": true,
            "lengthMenu": [
                [10, 25, 50, 100, -1],
                [10, 25, 50, 100, "Todos"]
            ],
            "buttons": [
                'copyHtml5',
                'excelHtml5',
                'csvHtml5',
                {
                    extend: 'pdfHtml5',
                    orientation: 'landscape', 
                    pageSize: 'A4',           
                    text: 'PDF'               
                }
            ],
            dom: '<"d-flex justify-content-between align-items-center mb-2"Bf>t<"datatable-footer d-flex justify-content-between align-items-center mt-2 w-100"<"footer-left"l><"footer-center"i><"footer-right"p>>', // Adicionando "l" para incluir a opção de seleção de quantidade de registros por página

        });
    });
</script>
<style>
    .is-invalido {
        box-shadow: 0 0 5px red !important;
    }

    thead {
        position: sticky;
        top: 130px;
        z-index: 6;
        background-color: #f8f9fa;
    }
</style>