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


$filtros = new Filtros();


// Obtendo os parâmetros
$ano = $_GET['ano'] ?? null;
$mes = $_GET['mes'] ?? null;
$url = http_build_query([
    'ano' => $ano,
    'mes' => $mes,
    'form_submitted' => '1'
]);

//Declarado as variáveis que serão usadas para edição.
$semanas = [
    ['id' => 0, 'data_inicial' => '', 'data_final' => '', 'semana_mes' => 1],
    ['id' => 0, 'data_inicial' => '', 'data_final' => '', 'semana_mes' => 2],
    ['id' => 0, 'data_inicial' => '', 'data_final' => '', 'semana_mes' => 3],
    ['id' => 0, 'data_inicial' => '', 'data_final' => '', 'semana_mes' => 4],
    ['id' => 0, 'data_inicial' => '', 'data_final' => '', 'semana_mes' => 5],
];

if (isset($_GET['id']) && $_GET['id'] == '1') {
    $semanas = [];
    $stmt = $connectionmysql->prepare("SELECT * FROM dias_semana ds WHERE YEAR(ds.data_inicial) = ? 
      AND MONTH(ds.data_inicial) = ? ORDER BY ds.semana_mes");

    if ($stmt) {
        // Vinculando parâmetros e executando a declaração
        $stmt->bind_param("ii",  $ano, $mes);
        $stmt->execute();

        // Obtendo os resultados
        $result = $stmt->get_result();
        if ($result->num_rows > 0) {
            while ($row = $result->fetch_assoc()) {
                $semanas[] = $row;  // adiciona cada linha no array
            }
        } else {
            echo "Nenhum registro encontrado para esse ano/mês.";
        }

        $stmt->close();
    } else {
        echo "Erro ao preparar a declaração: " . $connectionmysql->error;
    }
}
?>

<!DOCTYPE html>
<html lang="pt-br">
<?php
$pageTitle = "Preencher Semanas";
include('../header.php');
include('../menu.php');

?>

<head>
    <link rel="icon" href="/mandareceita/pages/configuracoes/logo-sm.png">
    <link rel="shortcut icon" href="/mandareceita/pages/configuracoes/logo-sm.png">

</head>

<body>


    <!-- ============================================================== -->
    <!-- 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"><?= $pageTitle ?></h4>
                    </div>

                    <div class="col-6 text-right">
                        <a href="index.php?<?= $url ?>" class="btn btn-light">
                            <i class="mdi mdi-keyboard-backspace"></i> Voltar
                        </a>
                    </div>

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

                    <div class="col-12">
                        <form id="formSemanas" method="post" action="processa_alteracao.php">
                            <input type="hidden" name="url" value="<?php echo isset($url) ? $url : ''; ?>" />

                            <?php foreach ($semanas as $semana): ?>
                                <div class="form-row row mb-3 align-items-end">
                                    <input type="hidden" name="id[]" value="<?php echo htmlspecialchars($semana['id'] ?? 0); ?>">

                                    <!-- Data inicial -->
                                    <div class="form-group col-3">
                                        <label>Data Inicial </label>
                                        <input type="date"
                                            <?= ($semana['semana_mes'] <> 5) ? 'id="DataInicial' . $semana['semana_mes'] . '"' : '' ?>
                                            name="DataInicial[]"
                                            class="form-control DataInicial <?= ($semana['semana_mes'] <> 5) ? 'DataInicial' . $semana['semana_mes'] : '' ?>"
                                            value="<?= htmlspecialchars($semana['data_inicial'] ?? '') ?>">
                                    </div>

                                    <!-- Data final -->
                                    <div class="form-group col-3">
                                        <label>Data Final</label>
                                        <input type="date"
                                            <?= ($semana['semana_mes'] <> 5) ? 'id="DataFinal' . $semana['semana_mes'] . '"' : '' ?>
                                            name="DataFinal[]"
                                            class="form-control DataFinal <?= ($semana['semana_mes'] <> 5) ? 'DataFinal' . $semana['semana_mes'] : '' ?>"
                                            value="<?= htmlspecialchars($semana['data_final'] ?? '') ?>">
                                    </div>

                                    <!-- Semana (select) -->
                                    <div class="form-group col-3 col-md-4 col-lg-2">
                                        <label>Semana</label>
                                        <select name="semana[]" class="form-control" required>
                                            <option value="">Selecione</option>
                                            <?php for ($i = 1; $i <= 5; $i++): ?>
                                                <option value="<?php echo $i; ?>"
                                                    <?php if (!empty($semana['semana_mes']) && $semana['semana_mes'] == $i) echo 'selected'; ?>>
                                                    Semana <?php echo $i; ?>
                                                </option>
                                            <?php endfor; ?>
                                        </select>
                                    </div>
                                </div>
                            <?php endforeach; ?>

                            <div class="col-12 text-right">
                                <button type="submit" class="btn btn-primary">Salvar Todos</button>
                            </div>
                        </form>

                    </div>
                </div>



            </div>
        </div>

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

    <!-- end wrapper -->

    <!-- ============================================================== -->
    <!-- End Page content -->
    <!-- ============================================================== -->

    <?php include('../footer.php'); ?>
    <?php include('../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>

    <script src="../../geral/javascript.js"></script>
    <script>
        function showModal(title, message) {
            const modal = new bootstrap.Modal(document.getElementById('exampleModal'));
            const modalTitle = document.querySelector('.modal-title');
            const modalBody = document.querySelector('.modal-body p');

            modalTitle.textContent = title;
            modalBody.textContent = message;

            modal.show();
        }


        function adicionarClasseErro(campo) {
            campo.classList.add('is-invalido');
        }

        function removerClasseErro(campo) {
            campo.classList.remove('is-invalido');
        }

        function getPairIndexFromElement(el) {
            // retorna índice do elemento dentro do NodeList de DataInicials (ou DataFinals)
            const iniciais = Array.from(document.querySelectorAll('.DataInicial'));
            const finais = Array.from(document.querySelectorAll('.DataFinal'));
            let idx = iniciais.indexOf(el);
            if (idx !== -1) return {
                index: idx,
                counterpart: finais[idx] || null
            };
            idx = finais.indexOf(el);
            if (idx !== -1) return {
                index: idx,
                counterpart: iniciais[idx] || null
            };
            return {
                index: -1,
                counterpart: null
            };
        }

        function verificarDatas() {
            // Função usada enquanto digita: só marca pares com ordem inválida (sem mostrar modal)
            const iniciais = document.querySelectorAll('.DataInicial');
            const finais = document.querySelectorAll('.DataFinal');

            const max = Math.max(iniciais.length, finais.length);

            for (let i = 0; i < max; i++) {
                const ini = iniciais[i] || null;
                const fin = finais[i] || null;
                const vIni = ini ? ini.value.trim() : '';
                const vFin = fin ? fin.value.trim() : '';

                // limpa classes por padrão
                if (ini) removerClasseErro(ini);
                if (fin) removerClasseErro(fin);

                if (vIni === '' && vFin === '') {
                    // ok, par vazio
                    continue;
                }

                // se ambos preenchidos, verifica ordem
                if (vIni !== '' && vFin !== '') {
                    const dateIni = new Date(vIni);
                    const dateFin = new Date(vFin);
                    if (dateIni > dateFin) {
                        if (ini) adicionarClasseErro(ini);
                        if (fin) adicionarClasseErro(fin);
                    } else {
                        if (ini) removerClasseErro(ini);
                        if (fin) removerClasseErro(fin);
                    }
                }
            }
        }

        function validarFormulario(e) {
            const iniciais = document.querySelectorAll('.DataInicial');
            const finais = document.querySelectorAll('.DataFinal');

            const max = Math.max(iniciais.length, finais.length);
            let algumPreenchido = false;

            // limpa todos erros antigos
            document.querySelectorAll('.is-invalid').forEach(el => el.classList.remove('is-invalid'));

            for (let i = 0; i < max; i++) {
                const ini = iniciais[i] || null;
                const fin = finais[i] || null;
                const vIni = ini ? ini.value.trim() : '';
                const vFin = fin ? fin.value.trim() : '';

                if (vIni === '' && vFin === '') {
                    continue; // par vazio -> ignora
                }

                // existe pelo menos um par preenchido parcialmente/totalmente
                if (vIni !== '' && vFin !== '') {
                    algumPreenchido = true;
                    // verifica ordem
                    const dateIni = new Date(vIni);
                    const dateFin = new Date(vFin);
                    if (dateIni > dateFin) {
                        adicionarClasseErro(ini);
                        adicionarClasseErro(fin);
                        showModal('Erro', 'A data inicial não pode ser maior que a data final.');
                        return false;
                    }
                } else {
                    // um vazio e outro preenchido -> erro
                    if (vIni === '') adicionarClasseErro(ini);
                    if (vFin === '') adicionarClasseErro(fin);
                    showModal('Informação', 'Para cada semana, tanto a data inicial quanto a data final devem estar preenchidas.');
                    return false;
                }
            }

            if (!algumPreenchido) {
                showModal('Informação', 'Pelo menos uma semana  deve estar definida para realizar o cadastro.');
                return false;
            }

            // Tudo ok
            return true;
        }

        // adiciona listeners quando DOM estiver pronto
        document.addEventListener('DOMContentLoaded', function() {
            // adicionar listeners de input para remover erro e re-verificar
            document.querySelectorAll('.DataInicial, .DataFinal').forEach(function(campo) {
                campo.addEventListener('input', function() {
                    // remove erro do próprio campo e do par
                    removerClasseErro(this);
                    const {
                        index,
                        counterpart
                    } = getPairIndexFromElement(this);
                    if (counterpart) removerClasseErro(counterpart);
                    // revalida visualmente (sem modal)
                    verificarDatas();
                });
            });

            // intercepta submit do formulário
            document.getElementById('formSemanas').addEventListener('submit', function(ev) {
                if (!validarFormulario()) {
                    ev.preventDefault();
                }
            });
        });
    </script>
    <style>
        .is-invalido {
            box-shadow: 0 0 5px red !important;
        }
    </style>

</body>

</html>