<?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');
$servicosSelecionados = $usuario['servicos'] ?? $usuario['servicos_ids'] ?? [];
if (!is_array($servicosSelecionados)) {
    $servicosSelecionados = [];
}
$servicosSelecionados = array_map('intval', $servicosSelecionados);
?>

<section class="page-header page-header-flex">
    <div>
        <h2><?= $editando ? 'Editar usuário' : 'Novo usuário administrativo' ?></h2>
        <p>Defina perfil, serviços vinculados e nível de edição das ocorrências.</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="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 style="margin-top:16px;" id="servicos-wrapper">
            <label for="servicos">Serviços vinculados</label>
            <select id="servicos" name="servicos[]" multiple size="8">
                <?php foreach ($categorias as $categoria): ?>
                    <option value="<?= (int) $categoria['id'] ?>" <?= in_array((int) $categoria['id'], $servicosSelecionados, true) ? 'selected' : '' ?>>
                        <?= e($categoria['nome']) ?>
                    </option>
                <?php endforeach; ?>
            </select>
            <p class="help-text">Segure CTRL para selecionar vários serviços. Este vínculo define quais ocorrências o usuário poderá visualizar quando a opção "Visualiza todas" estiver desmarcada.</p>
        </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 servicos = document.getElementById('servicos');
    const servicosWrapper = document.getElementById('servicos-wrapper');
    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 selectedServicesCount() {
        return Array.from(servicos.options).filter(function (option) {
            return option.selected;
        }).length;
    }

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

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

        if (perfil.value === 'ADMIN' || visualizaTodas.checked || !podeVisualizar.checked) {
            servicos.setAttribute('disabled', 'disabled');
            servicosWrapper.classList.add('muted');
        } else {
            servicos.removeAttribute('disabled');
            servicosWrapper.classList.remove('muted');
        }

        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 (selectedServicesCount() > 0 && podeEditar.checked) {
            resumo.textContent = 'Acessa apenas os serviços vinculados com permissão de edição';
        } else if (selectedServicesCount() > 0) {
            resumo.textContent = 'Acessa apenas os serviços vinculados somente para consulta';
        } else {
            resumo.textContent = 'Selecione ao menos um serviço vinculado para restringir o acesso';
        }
    }

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

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