<?php
$formData = Session::get('usuario_form_data', []);
if (!empty($formData)) {
    Session::forget('usuario_form_data');
    $usuario = array_merge($usuario, $formData);
}

$editando = $modo === 'edit';
$action = $editando ? base_url('/admin/usuarios/update') : base_url('/admin/usuarios/store');
?>

<section class="page-header page-header-flex">
    <div>
        <h2><?= $editando ? 'Editar usuário' : 'Novo usuário administrativo' ?></h2>
        <p>Defina perfil, escopo de visualização das ocorrências e nível de edição.</p>
    </div>
    <div>
        <a class="btn btn-outline" href="<?= base_url('/admin/usuarios') ?>">Voltar</a>
    </div>
</section>

<?php if ($msg = Session::getFlash('erro')): ?>
    <div class="alert error"><?= e($msg) ?></div>
<?php endif; ?>

<div class="card form-card">
    <form method="POST" action="<?= $action ?>">
        <?php if ($editando): ?>
            <input type="hidden" name="id" value="<?= (int) $usuario['id'] ?>">
        <?php endif; ?>

        <div class="grid-2">
            <div>
                <label for="nome">Nome</label>
                <input type="text" id="nome" name="nome" value="<?= e($usuario['nome'] ?? '') ?>" maxlength="150" required>
            </div>

            <div>
                <label for="email">E-mail</label>
                <input type="email" id="email" name="email" value="<?= e($usuario['email'] ?? '') ?>" maxlength="150" required>
            </div>

            <div>
                <label for="perfil">Perfil</label>
                <select id="perfil" name="perfil" required>
                    <?php foreach ($perfis as $perfil): ?>
                        <option value="<?= e($perfil) ?>" <?= (string)($usuario['perfil'] ?? '') === $perfil ? 'selected' : '' ?>><?= e($perfil) ?></option>
                    <?php endforeach; ?>
                </select>
            </div>

            <div>
                <label for="setor_id">Setor vinculado</label>
                <select id="setor_id" name="setor_id">
                    <option value="">Sem vínculo setorial</option>
                    <?php foreach ($setores as $setor): ?>
                        <option value="<?= (int) $setor['id'] ?>" <?= (string)($usuario['setor_id'] ?? '') === (string)$setor['id'] ? 'selected' : '' ?>><?= e($setor['nome']) ?></option>
                    <?php endforeach; ?>
                </select>
                <p class="help-text">Use quando o usuário puder visualizar somente as ocorrências do próprio setor.</p>
            </div>

            <div>
                <label for="senha"><?= $editando ? 'Nova senha (opcional)' : 'Senha' ?></label>
                <input type="password" id="senha" name="senha" minlength="6" <?= $editando ? '' : 'required' ?>>
            </div>
        </div>

        <div class="grid-2" style="margin-top:16px;">
            <label class="checkbox-inline checkbox-inline-card" for="ativo">
                <input type="checkbox" id="ativo" name="ativo" value="1" <?= (int)($usuario['ativo'] ?? 0) === 1 ? 'checked' : '' ?>>
                Usuário ativo para login
            </label>

            <label class="checkbox-inline checkbox-inline-card" for="pode_visualizar_ocorrencias">
                <input type="checkbox" id="pode_visualizar_ocorrencias" name="pode_visualizar_ocorrencias" value="1" <?= (int)($usuario['pode_visualizar_ocorrencias'] ?? 0) === 1 ? 'checked' : '' ?>>
                Pode visualizar ocorrências
            </label>

            <label class="checkbox-inline checkbox-inline-card" for="visualiza_todas_ocorrencias">
                <input type="checkbox" id="visualiza_todas_ocorrencias" name="visualiza_todas_ocorrencias" value="1" <?= (int)($usuario['visualiza_todas_ocorrencias'] ?? 0) === 1 ? 'checked' : '' ?>>
                Visualiza todas as ocorrências
            </label>

            <label class="checkbox-inline checkbox-inline-card" for="pode_editar_ocorrencias">
                <input type="checkbox" id="pode_editar_ocorrencias" name="pode_editar_ocorrencias" value="1" <?= (int)($usuario['pode_editar_ocorrencias'] ?? 0) === 1 ? 'checked' : '' ?>>
                Pode editar status e setor
            </label>
        </div>

        <div class="service-preview-card" id="permissao-preview" style="--service-color:#1351b4; margin-top:18px;">
            <div class="service-preview-head">
                <strong>Resumo da permissão</strong>
                <span class="muted" id="permissao-resumo"></span>
            </div>
            <span class="category-badge service-preview-badge" id="perfil-badge"><?= e($usuario['perfil'] ?? 'TRIAGEM') ?></span>
        </div>

        <div class="actions-row">
            <button type="submit" class="btn"><?= $editando ? 'Salvar alterações' : 'Cadastrar usuário' ?></button>
            <a class="btn btn-outline" href="<?= base_url('/admin/usuarios') ?>">Cancelar</a>
        </div>
    </form>
</div>

<script>
(function () {
    const perfil = document.getElementById('perfil');
    const setor = document.getElementById('setor_id');
    const podeVisualizar = document.getElementById('pode_visualizar_ocorrencias');
    const visualizaTodas = document.getElementById('visualiza_todas_ocorrencias');
    const podeEditar = document.getElementById('pode_editar_ocorrencias');
    const resumo = document.getElementById('permissao-resumo');
    const badge = document.getElementById('perfil-badge');

    function syncRules() {
        if (perfil.value === 'ADMIN') {
            podeVisualizar.checked = true;
            visualizaTodas.checked = true;
            podeEditar.checked = true;
            setor.value = '';
            setor.setAttribute('disabled', 'disabled');
            podeVisualizar.setAttribute('disabled', 'disabled');
            visualizaTodas.setAttribute('disabled', 'disabled');
            podeEditar.setAttribute('disabled', 'disabled');
        } else {
            setor.removeAttribute('disabled');
            podeVisualizar.removeAttribute('disabled');
            visualizaTodas.removeAttribute('disabled');
            podeEditar.removeAttribute('disabled');
        }

        if (!podeVisualizar.checked) {
            visualizaTodas.checked = false;
            podeEditar.checked = false;
        }

        if (visualizaTodas.checked) {
            setor.value = '';
            setor.setAttribute('disabled', 'disabled');
        } else if (perfil.value !== 'ADMIN') {
            setor.removeAttribute('disabled');
        }

        badge.textContent = perfil.value;

        if (!podeVisualizar.checked) {
            resumo.textContent = 'Sem acesso ao módulo de ocorrências';
        } else if (visualizaTodas.checked && podeEditar.checked) {
            resumo.textContent = 'Acessa todas as ocorrências com permissão de edição';
        } else if (visualizaTodas.checked) {
            resumo.textContent = 'Acessa todas as ocorrências somente para consulta';
        } else if (podeEditar.checked) {
            resumo.textContent = 'Acessa apenas o setor vinculado com permissão de edição';
        } else {
            resumo.textContent = 'Acessa apenas o setor vinculado somente para consulta';
        }
    }

    [perfil, setor, podeVisualizar, visualizaTodas, podeEditar].forEach(function (el) {
        el.addEventListener('change', syncRules);
    });

    syncRules();
})();
</script>
