    <?php
$path = '';
if (file_exists(__DIR__ . '../../conexao/conexao.php')) {
    $path = __DIR__ . '../../conexao/conexao.php';
} elseif (file_exists(__DIR__ . '../conexao/conexao.php')) {
    $path = __DIR__ . '../conexao/conexao.php';
}
if ($path) {
    require_once $path;
} else {
    die("Arquivo de conexão não encontrado.");
}

$ano = isset($_GET['ano']) ? (int) $_GET['ano'] : null;
$mes = isset($_GET['mes']) ? (int) $_GET['mes'] : null;
$semanaJS = $_GET['semana'] ?? null;
$x = isset($_GET['se']) ?? null;
$z = isset($_GET['semana_selecionada']) ? true : null;

class Filtros
{
    private $connectionmysql;
    private $connection;

    public function __construct()
    {
        global $connectionmysql, $connection;
        $this->connectionmysql = $connectionmysql;
        $this->connection = $connection;
    }
    public function removeAcentos($string)
    {
        $acentos = array(
            'á',
            'à',
            'ã',
            'â',
            'ä',
            'é',
            'è',
            'ê',
            'ë',
            'í',
            'ì',
            'î',
            'ï',
            'ó',
            'ò',
            'õ',
            'ô',
            'ö',
            'ú',
            'ù',
            'û',
            'ü',
            'ç',
            'Á',
            'À',
            'Ã',
            'Â',
            'Ä',
            'É',
            'È',
            'Ê',
            'Ë',
            'Í',
            'Ì',
            'Î',
            'Ï',
            'Ó',
            'Ò',
            'Õ',
            'Ô',
            'Ö',
            'Ú',
            'Ù',
            'Û',
            'Ü',
            'Ç'
        );

        $semAcentos = array(
            'a',
            'a',
            'a',
            'a',
            'a',
            'e',
            'e',
            'e',
            'e',
            'i',
            'i',
            'i',
            'i',
            'o',
            'o',
            'o',
            'o',
            'o',
            'u',
            'u',
            'u',
            'u',
            'c',
            'A',
            'A',
            'A',
            'A',
            'A',
            'E',
            'E',
            'E',
            'E',
            'I',
            'I',
            'I',
            'I',
            'O',
            'O',
            'O',
            'O',
            'O',
            'U',
            'U',
            'U',
            'U',
            'C'
        );

        return str_replace($acentos, $semAcentos, $string);
    }
    // Método que retorna o array de meses
    public function mes()
    {
        $meses = array(
            1 => "Janeiro",
            2 => "Fevereiro",
            3 => "Março",
            4 => "Abril",
            5 => "Maio",
            6 => "Junho",
            7 => "Julho",
            8 => "Agosto",
            9 => "Setembro",
            10 => "Outubro",
            11 => "Novembro",
            12 => "Dezembro"
        );
        return $meses;
    }

    // Método para gerar o HTML do campo de seleção de cidade
    public function filtroCidade($cidadeSelecionada = null, $cidadeFiliais = [], $mostrarTodos = false, $required = '', $validar = true, $value_id = false)
    {
        $html = '<div class="form-group col-6 col-md-4 col-lg-2">';
        $html .= '<label for="cidade" class="col-form-label">Cidade</label>';
        $html .= '<select id="cidade" name="cidade" ' . $required . ' class="form-control"'
            . ($validar ? ' oninput="validarCampo(\'cidade\', this.value)"' : '') . '>';

        // Se tiver só uma cidade nas filiais, força como selecionada
        if (count($cidadeFiliais) === 1) {
            $cidadeSelecionada = trim($cidadeFiliais[0]['id_cidade']);
        }

        // Se $mostrarTodos for true, exibe "Todos", senão exibe "Selecione"
        $html .= '<option value="Todos"' . (!isset($cidadeSelecionada) || $cidadeSelecionada == "Todos" ? ' selected' : '') . '>' . ($mostrarTodos ? 'Todos' : 'Selecione') . '</option>';
        if ($value_id) {
            foreach ($cidadeFiliais as $item) {
                $selected = (isset($cidadeSelecionada) && $cidadeSelecionada == trim($item['id_cidade'])) ? ' selected' : '';
                $html .= '<option value="' . trim($item['id_cidade']) . '"' . $selected . '>' . trim($item['nome_cidade']) . '</option>';
            }
        } else {
            foreach ($cidadeFiliais as $item) {
                $selected = (isset($cidadeSelecionada) && $cidadeSelecionada == trim($item['id_cidade'])) ? ' selected' : '';
                $html .= '<option value="' . trim($item['nome_cidade']) . '"' . $selected . '>' . trim($item['nome_cidade']) . '</option>';
            }
        }

        $html .= '</select>';
        $html .= '</div>';
        return $html;
    }


    // Método para gerar o HTML do campo de seleção de filial
    public function filtroFilialSimples($filialSelecionada = null, $filiais = [], $mostrarTodos = true, $nomealternativo = null)
    {
        $ids = array_column($filiais, 'ID');
        array_unshift($ids, 'x');
        $ids_filial = implode(',', $ids);

        // Define o nome do campo e o rótulo, usando o valor alternativo, se fornecido
        $label = isset($nomealternativo) ? $nomealternativo : 'Filial';
        $name = isset($nomealternativo) ? str_replace(' ', '_', strtolower($nomealternativo)) : 'filial';

        $html = '<div class="form-group col-6 col-md-4 col-lg-2">';
        $html .= '<label for="' . htmlspecialchars($name) . '" class="col-form-label">' . htmlspecialchars($label) . '</label>';

        $html .= '<select id="' . htmlspecialchars($name) . '" name="' . htmlspecialchars($name) . '" class="form-control" oninput="validarCampo(\'' . htmlspecialchars($name) . '\', this.value)">';

        // Adiciona a opção "Todos" com os IDs concatenados
        $html .= '<option value="' . $ids_filial . '"' . (($filialSelecionada === $ids_filial) ? ' selected' : '') . '>';
        $html .= $mostrarTodos ? 'Todos' : 'Selecione';
        $html .= '</option>';

        // Adiciona as filiais disponíveis
        foreach ($filiais as $item) {
            $selected = ($filialSelecionada == $item['ID']) ? ' selected' : '';
            $html .= '<option value="' . $item['ID'] . '" data-cidade="' . trim($item['ID_REFERENCIA']) . '"' . $selected . '>';
            $html .= htmlspecialchars($item['NOME']);
            $html .= '</option>';
        }

        $html .= '</select>';
        $html .= '</div>';

        return $html; // Retorna o HTML gerado
    }
    public function getQtdSemanaMes($ano = null, $mes = null)
    {
        $sql = "SELECT 
            -- EXTRACT(YEAR FROM ds.data_inicial) AS ano,
            -- EXTRACT(MONTH FROM ds.data_inicial) AS mes,
            -- COUNT(*) AS quantidade_itens
            *
        FROM dias_semana ds
        WHERE EXTRACT(YEAR FROM ds.data_inicial) = $ano ";

        if (!empty($mes)) {
            $sql .= " AND EXTRACT(MONTH FROM ds.data_inicial) = $mes ";
        }

        $sql .= " ORDER BY semana_mes";

        $stmt = $this->connectionmysql->prepare($sql);
        $stmt->execute();
        $result = $stmt->get_result();

        $dados = [];
        if ($result && $result->num_rows > 0) {
            while ($row = $result->fetch_assoc()) {
                $dados[] = $row;
            }
        }

        return $dados;
    }
    public function filtroSemana($ano, $mes, $semanaSelecionada = null, $select = false)
    {
        // busca as semanas reais daquele ano/mês
        $semanas = $this->getQtdSemanaMes($ano, $mes);

        // $html  = '<div id="drop_semana" class="form-group col-6 col-md-4 col-lg-2 ">';
        $html = '<label for="semana" class="col-form-label">Semana</label>';
        $html .= '<select name="semana" id="semana" class="form-control" oninput="validarCampo(\'semana\')">';
        if ($select) {
            $html .= '<option value="Selecione">Selecione</option>';
        } else {
            $html .= '<option value="mes">Mês</option>';
        }

        if (!empty($semanas)) {
            foreach ($semanas as $row) {
                $selected = ($semanaSelecionada == $row['semana_mes']) ? ' selected' : '';
                $html .= '<option value="' . $row['semana_mes'] . '"' . $selected . '>Semana ' . $row['semana_mes'] . '</option>';
            }
        }


        $html .= '</select>';
        //$html .= '</div>';

        return $html;
    }
    public function filtroSemanaJavaScript($semanaJS)
    {

        $html = " 
        function carregarSemanas() {
        const ano = document.getElementById('ano').value;
                  const mes = document.getElementById('mes').value;
                            const semana = <?= " + '{$semanaJs}' + " ?>;

             if (ano && mes) {
            const xhr = new XMLHttpRequest();
                xhr.open('GET', '../configuracao/filtros.php?ano=' + ano + '&mes=' + mes + '&se=1&semana=' + semana, true);
               xhr.onreadystatechange = function() {
            if (xhr.readyState === 4 && xhr.status === 200) {
                    document.getElementById('drop_semana').innerHTML = xhr.responseText;
          }
           };
        xhr.send();
         }
        }
        // Event listeners para atualizar o filtro em tempo real
        document.getElementById('ano').addEventListener('change', carregarSemanas);
         document.getElementById('mes').addEventListener('change', carregarSemanas);
        window.addEventListener('DOMContentLoaded', carregarSemanas);";

        return $html;
    }


    public function filtroEtapa($etapaSelecionada = null, $etapa = [], $obrigatorio = false, $disabled = false, $page = '', $nomeLabel = '')
    {
        if ($page == 'produtividade.php' and $page <> '') {
            $value = '';
            $name = 'Selecione uma etapa';
        } else {
            $value = "Todos";
            $name = 'Todos';
        }

        if ($nomeLabel <> '') {
            $label = $nomeLabel;
        } else {
            $label = 'Etapa';
        }

        $html = '<div class=" form-group col-6 col-md-4 col-lg-2">';
        $html .= '<label for="etapa" class="col-form-label">' . $label . '';
        if ($obrigatorio) {
            $html .= ' <span class="text-danger">*</span>';
        }
        $html .= '</label>';
        $html .= '<select id="etapa" name="etapa" class="form-control" ';
        if ($disabled) {
            $html .= ' disabled ';
        }
        $html .= 'oninput="validarCampo(\'etapa\')">';
        $html .= '<option value="' . $value . '"' . ($etapaSelecionada == "Todos" ? ' selected' : '') . '>' . $name . '</option>';
        foreach ($etapa as $item) {
            $nomeEtapa = htmlspecialchars($item['NOME_ETAPA']);
            $selected = ($etapaSelecionada == $item['CODIGO_ETAPA']) ? ' selected' : '';
            $html .= '<option value="' . $item['CODIGO_ETAPA'] . '"' . $selected . '>' . $nomeEtapa . '</option>';
        }
        $html .= '</select>';
        $html .= '<div class="invalid-feedback">Por favor, selecione uma etapa.</div>';
        $html .= '</div>';
        return $html;
    }

    // Método para gerar o HTML do campo de seleção de meses
    public function filtroMes($mesSelecionado = null)
    {
        $meses = $this->mes(); // Array de meses
        $mesAtual = date('m'); // Obtém o mês atual (01-12)

        // Se não veio parâmetro, usa o mês atual
        $selectedMes = $mesSelecionado ?? $mesAtual;

        $html = '<div class="form-group col-6 col-md-4 col-lg-2">';
        $html .= '<label for="mes" class="col-form-label">Mês</label>';
        // Adicionado required
        $html .= '<select name="mes" id="mes" class="form-control" required oninput="validarCampo(\'mes\', this.value)">';
        $html .= '<option value="">Selecione</option>'; // Valor vazio para obrigatoriedade

        foreach ($meses as $numero => $nomeMes) {
            $selected = ($selectedMes == $numero) ? "selected" : "";
            $html .= '<option value="' . str_pad($numero, 2, '0', STR_PAD_LEFT) . '" ' . $selected . '>' . $nomeMes . '</option>';
        }

        $html .= '</select>';
        $html .= '</div>';

        return $html;
    }

    // Método para gerar o HTML do campo de seleção de anos
    public function filtroAno($anoSelecionado = null)
    {
        $anoAtual = date('Y');
        $mesAtual = date('m');

        $anos = [
            $anoAtual,
            $anoAtual - 1,
            $anoAtual - 2,
            $anoAtual - 3
        ];

        if ($mesAtual == '12') {
            array_unshift($anos, $anoAtual + 1);
        }

        $selectedAno = $anoSelecionado ?? $anoAtual; // Se não veio parâmetro, usa o ano atual

        $html = '<div class="form-group col-6 col-md-4 col-lg-2">';
        $html .= '<label for="ano" class="col-form-label">Ano</label>';
        $html .= '<select id="ano" name="ano" class="form-control" oninput="validarCampo(\'ano\', this.value)">';
        $html .= '<option value="Todos">Selecione</option>';

        foreach ($anos as $anoOption) {
            $selected = ($selectedAno == $anoOption) ? "selected" : "";
            $html .= '<option value="' . $anoOption . '" ' . $selected . '>' . $anoOption . '</option>';
        }

        $html .= '</select>';
        $html .= '</div>';

        return $html;
    }

    public function filtroErros($errosArray, $erroSelect)
    {
        $html = '<div class=" form-group col-6 col-md-4 col-lg-2">';
        $html .= '<label for="erro" class="col-form-label">Erro</label>';
        $html .= '<select name="erro" id="erro" class="form-control" onchange="validarCampo(\'erro\')">';

        // Adiciona a primeira opção "Selecione"
        $html .= '<option value="" ' . (empty($erroSelect['id_erro']) ? 'selected' : '') . ' disabled>Selecione</option>';

        // Adiciona as opções de erros
        foreach ($errosArray as $erro) {
            $selected = ($erroSelect['id_erro'] == $erro['id_erro']) ? 'selected' : '';
            $html .= "<option value=\"{$erro['id_erro']}\" $selected>{$erro['nome_erro']}</option>";
        }

        $html .= '</select>';

        // Input hidden para armazenar o valor de id_erro
        $html .= '<input type="hidden" name="id_erro" id="id_erro" value="' . htmlspecialchars($erroSelect['id_erro']) . '">';
        $html .= '</div>';

        return $html;
    }

    // Adicione esta função dentro da class Filtros no arquivo filtros.php do KPI
    // public function filtroCheckBoxDashVendedores($nome, $itens, $filialSelect = null, $view_id = false, $validar = false)
    // {
    //     $nome_id = strtolower($nome);
    //     $nome_id = preg_replace('/[^A-Za-z0-9]/', '_', strtolower($nome)); 
    //     $titulo = ucfirst($nome);

    //     $valorInicial = is_array($filialSelect) ? implode(',', $filialSelect) : $filialSelect;

    //     $html = '
    //     <div class="form-group col-6 col-md-4 col-lg-2 drop" id="drop_' . $nome_id . '" style="bottom: 0px;">
    //     <div class="' . htmlspecialchars($nome_id) . '-container">
    //         <div class="' . htmlspecialchars($nome_id) . '-header">
    //             <label for="' . htmlspecialchars($nome_id) . '_input" class="col-form-label">' . htmlspecialchars($titulo) . '</label>
    //         <span id="' . htmlspecialchars($nome_id)  . '_clear_btn" 
    //         style="cursor: pointer; margin-left: 5px; font-size: 13px; display: none;" 
    //         onclick="toggleDeleteAll' . htmlspecialchars($nome_id)  . '()">Limpar</span>

    //             <input type="hidden" id="' . htmlspecialchars($nome_id) . 'selecionados" name="' . htmlspecialchars($nome_id) . '">
    //         </div>
    //         <input type="text" id="' . htmlspecialchars($nome_id) . '_input" class="form-control" placeholder="Digite para filtrar..." autocomplete="off">
    //         <div id="' . htmlspecialchars($nome_id) . '_dropdown" class="' . htmlspecialchars($nome_id) . '-dropdown-menu" style="width: 100%; display: none;">';

    //     foreach ($itens as $iten) {
    //         $html .= '
    //         <div class="' . htmlspecialchars($nome_id) . '-dropdown-item">
    //             <input type="checkbox" class="' . htmlspecialchars($nome_id) . '-checkbox" 
    //             data-' . htmlspecialchars($nome_id) . '-id="' . htmlspecialchars(trim($iten['ID'])) . '"';

    //         if (!$view_id) {
    //             $html .= ' data-' . htmlspecialchars($nome_id) . '-name="' . htmlspecialchars(trim($iten['ID'])) . ' - ' . htmlspecialchars($iten['NOME']) . '"';
    //         } else {
    //             $html .= ' data-' . htmlspecialchars($nome_id) . '-name="' . htmlspecialchars($iten['NOME']) . '"';
    //         }

    //         $html .= ' onchange="updateSelectedItems' . htmlspecialchars($nome_id) . '()" ' . ($validar ? ' oninput="validarCheckBox()"' : '') . '>
    //     <label for="' . htmlspecialchars($iten['ID']) . '">';

    //         if (!$view_id) {
    //             $html .= htmlspecialchars(trim($iten['ID'])) . ' - ' . htmlspecialchars($iten['NOME']);
    //         } else {
    //             $html .= htmlspecialchars($iten['NOME']);
    //         }

    //         $html .= '</label>
    //         </div>';
    //     }

    //     $html .= '
    //         </div>
    //     </div>
    //     </div>
    //     <script>
    //     var ' . $nome_id . 'Select = ' . json_encode($filialSelect) . ';
    //     </script>';

    //     return $html;
    // }

    public function filtroCheckBoxDashVendedores($nome, $itens, $filialSelect = null, $view_id = false, $validar = false)
    {
        $nome_id = strtolower($nome);
        $nome_id = preg_replace('/[^A-Za-z0-9]/', '_', strtolower($nome));
        $titulo = ucfirst($nome);

        // Garante que filialSelect seja uma string limpa para o input value
        $valorInicial = is_array($filialSelect) ? implode(',', $filialSelect) : $filialSelect;

        // Se não foi passado nenhum valor inicial, usamos todos os IDs disponíveis
        if (empty($valorInicial)) {
            // Preferir CODIGO_FC quando disponível (é o código usado no ERP/Firebird)
            $idsTodos = [];
            foreach ($itens as $it) {
                if (!empty($it['CODIGO_FC'])) {
                    $idsTodos[] = $it['CODIGO_FC'];
                } else {
                    $idsTodos[] = $it['ID'];
                }
            }
            $valorInicial = implode(',', $idsTodos);
        }

        $html = '
        <div class="form-group col-6 col-md-4 col-lg-2 drop" id="drop_' . $nome_id . '" style="bottom: 0px;">
        <div class="' . htmlspecialchars($nome_id) . '-container">
            <div class="' . htmlspecialchars($nome_id) . '-header">
                <label for="' . htmlspecialchars($nome_id) . '_input" class="col-form-label">' . htmlspecialchars($titulo) . "<span class='text-danger'>*</span>" . '</label>
            <span id="' . htmlspecialchars($nome_id)  . '_clear_btn" 
            style="cursor: pointer; font-size: 0.8em; color: #dc3545; margin-left: 5px; display: none;" 
            onclick="toggleDeleteAll' . htmlspecialchars($nome_id)  . '()">Limpar</span> 

                <input type="hidden" id="' . htmlspecialchars($nome_id) . 'selecionados" name="' . htmlspecialchars($nome_id) . '" value="' . htmlspecialchars($valorInicial) . '">
            </div>
            <input type="text" id="' . htmlspecialchars($nome_id) . '_input" class="form-control" placeholder="Digite para filtrar..." autocomplete="off">
            <div id="' . htmlspecialchars($nome_id) . '_dropdown" class="' . htmlspecialchars($nome_id) . '-dropdown-menu" style="width: 100%; display: none;">';

        foreach ($itens as $iten) {
            $html .= '
            <div class="' . htmlspecialchars($nome_id) . '-dropdown-item">
                <input type="checkbox" class="' . htmlspecialchars($nome_id) . '-checkbox" 
                data-' . htmlspecialchars($nome_id) . '-id="' . htmlspecialchars(trim($iten['ID'])) . '"';

            if (!$view_id) {
                $html .= ' data-' . htmlspecialchars($nome_id) . '-name="' . htmlspecialchars(trim($iten['ID'])) . ' - ' . htmlspecialchars($iten['NOME']) . '"';
            } else {
                $html .= ' data-' . htmlspecialchars($nome_id) . '-name="' . htmlspecialchars($iten['NOME']) . '"';
            }

            // AQUI ESTÁ O SEGREDO: Usamos o nome da função dinâmica
            $html .= ' onchange="updateSelectedItems' . htmlspecialchars($nome_id) . '()" ' . ($validar ? ' oninput="validarCheckBox()"' : '') . '>
        <label for="' . htmlspecialchars($iten['ID']) . '">';

            if (!$view_id) {
                $html .= htmlspecialchars(trim($iten['ID'])) . ' - ' . htmlspecialchars($iten['NOME']);
            } else {
                $html .= htmlspecialchars($iten['NOME']);
            }

            $html .= '</label>
            </div>';
        }

        $html .= '
            </div>
        </div>
        </div>
        <script>
        var ' . $nome_id . 'Select = ' . json_encode($valorInicial) . ';
        (function(){
            document.addEventListener("DOMContentLoaded", function(){
                var input = document.querySelector("input[name=\'' . htmlspecialchars($nome_id) . '\']");
                if(!input) return;
                var form = input.closest("form");
                var defaultVal = ' . json_encode($valorInicial) . ';
                if(!input.value || input.value.trim() === ""){
                    input.value = defaultVal;
                }
                if(form){
                    form.addEventListener("submit", function(e){
                        if(!input.value || input.value.trim() === ""){
                            input.value = defaultVal;
                        }
                    });
                }
            });
        })();
        </script>';

        return $html;
    }

    public function filtroCheckBox($nome, $itens, $filialSelect = null, $view_id = false, $validar = false, $nome2 = null)
    {
        //<input type="checkbox" id="' . htmlspecialchars($nome) . 'select_all" onchange="toggleSelectAll' . htmlspecialchars($nome) .  '(this)">       
        //<label for="' . htmlspecialchars($nome) . 'select_all">Marcar Todos</label>
        $nome_id = strtolower($nome);
        $nome_id = preg_replace('/[^A-Za-z0-9]/', '_', strtolower($nome)); // usado para id/classe/função
        if (!empty($nome2)) {
            $titulo = ucfirst($nome2);
        } else {
            $titulo = ucfirst($nome);
        }
        $html = '
       <div class="form-group col-6 col-md-4 col-lg-2 drop" id="drop_' . $nome_id . '">
        <div class="' . htmlspecialchars($nome_id) . '-container" style="margin-top: 30px;">
            <div class="' . htmlspecialchars($nome_id) . '-header">
                <label for="' . htmlspecialchars($nome_id) . '_input" class="col-form-label">' . htmlspecialchars($titulo) . '</label>
               <span id="' . htmlspecialchars($nome_id)  . '_clear_btn" 
      style="cursor: pointer; margin-left: 5px; font-size: 13px; display: none;" 
      onclick="toggleDeleteAll' . htmlspecialchars($nome_id)  . '()">Limpar</span>

                <input type="hidden" id="' . htmlspecialchars($nome_id) . 'selecionados" name="' . htmlspecialchars($nome_id) . '">
            </div>
            <input type="text" id="' . htmlspecialchars($nome_id) . '_input" class="form-control" placeholder="Digite para filtrar..." autocomplete="off">
            <div id="' . htmlspecialchars($nome_id) . '_dropdown" class="' . htmlspecialchars($nome_id) . '-dropdown-menu" style="width: 100%; display: none;">';

        foreach ($itens as $iten) {
            // Usa CODIGO_FC se existir; caso contrário, usa ID para evitar erros de índice indefinido
            $codigo = isset($iten['CODIGO_FC']) ? $iten['CODIGO_FC'] : (isset($iten['ID']) ? $iten['ID'] : '');

            $html .= '
            <div class="' . htmlspecialchars($nome_id) . '-dropdown-item">
                <input type="checkbox" class="' . htmlspecialchars($nome_id) . '-checkbox" 
                data-' . htmlspecialchars($nome_id) . '-id="' . htmlspecialchars(trim($codigo)) . '"';

            // Adiciona o atributo data-name com base no valor de $view_id
            if (!$view_id) {
                $html .= ' data-' . htmlspecialchars($nome_id) . '-name="' . htmlspecialchars(trim($codigo)) . ' - ' . htmlspecialchars($iten['NOME']) . '"';
            } else {
                $html .= ' data-' . htmlspecialchars($nome_id) . '-name="' . htmlspecialchars($iten['NOME']) . '"';
            }

            // Adiciona o atributo data-referencia-* se existir ID_REFERENCIA
            if (isset($iten['ID_REFERENCIA'])) {
                $html .= ' data-referencia-' . htmlspecialchars($nome_id) . '="' . htmlspecialchars(trim($iten['ID_REFERENCIA'])) . '"';
            }

            $html .= ' onchange="updateSelectedItems' . htmlspecialchars($nome_id) . '()" ' . ($validar ? ' oninput="validarCheckBox()"' : '') . '>
         <label for="' . htmlspecialchars($codigo) . '">';

            if (!$view_id) {
                $html .= htmlspecialchars(trim($codigo)) . ' - ' . htmlspecialchars($iten['NOME']);
            } else {
                $html .= htmlspecialchars($iten['NOME']);
            }

            $html .= '</label>
            </div>';
        }


        // Se nenhum valor foi passado como seleção inicial, preenche com todos os IDs
        $valorInicial = is_array($filialSelect) ? implode(',', $filialSelect) : $filialSelect;
        if (empty($valorInicial)) {
            $idsTodos = [];
            foreach ($itens as $it) {
                if (!empty($it['CODIGO_FC'])) {
                    $idsTodos[] = $it['CODIGO_FC'];
                } else {
                    $idsTodos[] = $it['ID'];
                }
            }
            $valorInicial = implode(',', $idsTodos);
        }

        $html .= '
            </div>
        </div>
     </div>
     <script>
     var filialSelect = ' . json_encode($valorInicial) . ';
     (function(){
         document.addEventListener("DOMContentLoaded", function(){
             // procura o input hidden pelo nome gerado
             var input = document.querySelector("input[name=\'' . htmlspecialchars($nome_id) . '\']");
             if(!input) return;
             // encontra o form pai mais próximo
             var form = input.closest("form");
             // valor padrão com todos os IDs
             var defaultVal = ' . json_encode($valorInicial) . ';
             // se não houver valor, já define ao carregar
             if(!input.value || input.value.trim() === ""){
                 input.value = defaultVal;
             }
             // garante no submit que o campo tenha valor
             if(form){
                 form.addEventListener("submit", function(e){
                     if(!input.value || input.value.trim() === ""){
                         input.value = defaultVal;
                     }
                 });
             }
         });
     })();
     </script>';

        return $html;
    }

    public function FiltroSearch($nomeFiltro, $items, $id = false, $itemSelecionado = null, $validar = true)
    {
        $nomeFiltroLower = strtolower($nomeFiltro);
        $nomeFiltroLower = $this->removeAcentos($nomeFiltroLower);
        $nomeFiltro = str_replace('_', ' ', $nomeFiltro); // Substitui os underscores por espaços
        $nomeFiltro = ucwords($nomeFiltro); // Coloca a primeira letra de cada palavra em maiúscula

        $html = '<div class="form-group col-6 col-md-4 col-lg-2 " id="search_' . $nomeFiltroLower . '">';
        $html .= '<label for="' . $nomeFiltroLower . '" class="form-label">' . ucfirst($nomeFiltro) . '</label>';
        $html .= '<div class="input-group" id="div_' . $nomeFiltroLower . '">';

        // Campo de texto para busca
        $html .= '<input type="text" id="' . $nomeFiltroLower . '" class="form-control" placeholder="Nome ' . ucfirst($nomeFiltro) . '"';
        $html .= ' value="' . htmlspecialchars($itemSelecionado ?: '') . '"';
        $html .= ' autocomplete="off"';
        $html .= ($validar) ? ' onchange="validarCampo(\'' . $nomeFiltroLower . '\', this.value)"' : '';
        $html .= '>';

        // Campo hidden para armazenar o código do item selecionado
        $html .= '<input type="hidden" id="cod' . $nomeFiltroLower . '" name="cod' . $nomeFiltroLower . '" value="' . htmlspecialchars($itemSelecionado ?: '') . '">';
        $html .= '</div>';

        // Dropdown menu para exibir os itens
        $html .= '<div id="' . $nomeFiltroLower . 'dropdown" class="' . $nomeFiltroLower . '-dropdown-menu dropdown-menu" style="width: 100%;">';

        foreach ($items as $item) {
            $nomeExibido = ($id ? htmlspecialchars($item['ID']) . ' - ' : '') . htmlspecialchars($item['NOME']);

            $html .= '<a class="' . $nomeFiltroLower . '-dropdown-item" href="#"';
            $html .= ' data-nome-' . htmlspecialchars($nomeFiltroLower) . '="' . htmlspecialchars($nomeExibido) . '"';
            $html .= ' data-id-' . htmlspecialchars($nomeFiltroLower) . '="' . htmlspecialchars($item['ID']) . '"';
            $html .= ' data-referencia-' . htmlspecialchars($nomeFiltroLower) . '="' . htmlspecialchars($item['ID_REFERENCIA']) . '">';
            $html .= $nomeExibido;
            $html .= '</a>';
        }

        $html .= '</div>'; // Fim do dropdown
        $html .= '</div>'; // Fim do form-group

        return $html; // Retorna o HTML gerado
    }

    public function FiltroDataInicioFim($nomeFiltro)
    {
        // Converte o nome do filtro para minúsculo
        $nomeFiltroLower = strtolower($nomeFiltro);
        $nomeFiltroLower = str_replace(' ', '_', $nomeFiltroLower);
        $nomeFiltroLabel = ucwords(strtolower($nomeFiltro));
        // Verificar se há valores na URL para preencher os campos
        $dataInicial = isset($_GET[$nomeFiltroLower . 'Inicial']) ? $_GET[$nomeFiltroLower . 'Inicial'] : '';
        $dataFinal = isset($_GET[$nomeFiltroLower . 'Final']) ? $_GET[$nomeFiltroLower . 'Final'] : '';


        $html = '<div class="form-group col-6 col-md-4 col-lg-2">';
        $html .= '<label for="' . $nomeFiltroLower . 'Inicial" class="col-form-label">' . $nomeFiltroLabel . ' Inicial </label>';
        $html .= '<div class="input-group">';

        // Campo para data inicial com o valor da URL (caso exista)
        $html .= '<input type="date" id="' . $nomeFiltroLower . 'Inicial" name="' . $nomeFiltroLower . 'Inicial" class="form-control" value="' . htmlspecialchars($dataInicial) . '">';
        $html .= '</div>'; // Fim do input-group

        $html .= '</div>'; // Fim do form-group

        $html .= '<div class="form-group col-6 col-md-4 col-lg-2">';
        $html .= '<label for="' . $nomeFiltroLower . 'Final" class="col-form-label">' . $nomeFiltroLabel . ' Final</label>';
        $html .= '<div class="input-group">';

        // Campo para data final com o valor da URL (caso exista)
        $html .= '<input type="date" id="' . $nomeFiltroLower . 'Final" name="' . $nomeFiltroLower . 'Final" class="form-control" value="' . htmlspecialchars($dataFinal) . '">';
        $html .= '</div>'; // Fim do input-group

        $html .= '</div>'; // Fim do form-group


        // Retornar o HTML gerado
        return $html;
    }
}
if ($x) {
    $filtros = new Filtros($connection);
    echo $filtros->filtroSemana($ano, $mes, $semanaJS, $z);
}
