<?php
require __DIR__ . '/auth.php';
exigirAdmin();

$msg = '';
$erro = '';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    validarCsrf();
    $acao = isset($_POST['acao']) ? trim($_POST['acao']) : '';

    try {
        if ($acao === 'criar_usuario') {
            $nome = isset($_POST['nome']) ? trim($_POST['nome']) : '';
            $usuario = isset($_POST['usuario']) ? trim($_POST['usuario']) : '';
            $senha = isset($_POST['senha']) ? (string)$_POST['senha'] : '';

            if ($nome === '' || !preg_match('/^[A-Za-z0-9._-]{3,80}$/', $usuario) || strlen($senha) < 8) {
                throw new Exception('Preencha nome, usuário válido e senha com pelo menos 8 caracteres.');
            }

            $stmt = $pdo->prepare(
                "INSERT INTO usuarios_localizacao (nome, usuario, senha_hash, perfil, ativo)
                 VALUES (?, ?, ?, 'USUARIO', 1)"
            );
            $stmt->execute([$nome, $usuario, password_hash($senha, PASSWORD_DEFAULT)]);
            $msg = 'Usuário criado com sucesso.';
        }

        if ($acao === 'toggle_usuario') {
            $id = isset($_POST['id']) ? (int)$_POST['id'] : 0;
            if ($id > 0) {
                $stmt = $pdo->prepare(
                    "UPDATE usuarios_localizacao SET ativo=IF(ativo=1,0,1)
                     WHERE id=? AND perfil='USUARIO'"
                );
                $stmt->execute([$id]);
                $msg = 'Status do usuário atualizado.';
            }
        }

        if ($acao === 'reset_senha') {
            $id = isset($_POST['id']) ? (int)$_POST['id'] : 0;
            $senha = isset($_POST['senha']) ? (string)$_POST['senha'] : '';
            if ($id <= 0 || strlen($senha) < 8) throw new Exception('Informe uma senha com pelo menos 8 caracteres.');
            $stmt = $pdo->prepare("UPDATE usuarios_localizacao SET senha_hash=? WHERE id=?");
            $stmt->execute([password_hash($senha, PASSWORD_DEFAULT), $id]);
            $msg = 'Senha alterada.';
        }

        if ($acao === 'vincular') {
            $dispositivoId = isset($_POST['dispositivo_id']) ? (int)$_POST['dispositivo_id'] : 0;
            $usuarioId = isset($_POST['usuario_id']) ? (int)$_POST['usuario_id'] : 0;
            if ($dispositivoId <= 0) throw new Exception('Dispositivo inválido.');

            if ($usuarioId > 0) {
                $stmt = $pdo->prepare("SELECT id FROM usuarios_localizacao WHERE id=? AND ativo=1 LIMIT 1");
                $stmt->execute([$usuarioId]);
                if (!$stmt->fetch()) throw new Exception('Usuário inválido ou inativo.');
                $stmt = $pdo->prepare("UPDATE dispositivos SET usuario_id=? WHERE id=?");
                $stmt->execute([$usuarioId, $dispositivoId]);
                $msg = 'Aparelho vinculado ao usuário.';
            } else {
                $stmt = $pdo->prepare("UPDATE dispositivos SET usuario_id=NULL WHERE id=?");
                $stmt->execute([$dispositivoId]);
                $msg = 'Aparelho desvinculado.';
            }
        }
    } catch (Exception $e) {
        $erro = $e->getMessage();
    }
}

$usuarios = $pdo->query(
    "SELECT u.*,
       (SELECT COUNT(*) FROM dispositivos d WHERE d.usuario_id=u.id) AS qtd_dispositivos
     FROM usuarios_localizacao u
     ORDER BY u.perfil='ADMIN' DESC, u.nome"
)->fetchAll();

$usuariosComuns = array_values(array_filter($usuarios, function($x) {
    return isset($x['perfil']) && $x['perfil'] === 'USUARIO';
}));

$dispositivos = $pdo->query(
    "SELECT d.*, u.nome AS usuario_nome, u.usuario AS login_usuario,
       (SELECT MAX(l.registrado_em) FROM localizacoes l WHERE l.dispositivo_id=d.id) AS ultima_posicao
     FROM dispositivos d
     LEFT JOIN usuarios_localizacao u ON u.id=d.usuario_id
     ORDER BY d.usuario_id IS NULL DESC, d.nome"
)->fetchAll();
?>
<!doctype html><html lang="pt-BR"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
<title>Administrador - Localização</title><style>
*{box-sizing:border-box}body{margin:0;font-family:Arial,sans-serif;background:#f3f6f9;color:#1f2937}.wrap{max-width:1250px;margin:24px auto;padding:0 16px}
.top{background:#0f2742;color:#fff;border-radius:14px;padding:20px;display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}
.card{background:#fff;border-radius:14px;padding:18px;margin-top:18px;box-shadow:0 3px 16px #0001}h1,h2,h3{margin-top:0}
.btn{display:inline-block;border:0;border-radius:9px;padding:9px 12px;background:#0f2742;color:#fff;text-decoration:none;cursor:pointer}.light{background:#e8eef5;color:#0f2742}.danger{background:#b42318}
.ok{background:#dcfce7;color:#166534;padding:10px;border-radius:9px}.erro{background:#fee2e2;color:#991b1b;padding:10px;border-radius:9px}
.grid{display:grid;grid-template-columns:1fr 1fr;gap:18px}.formgrid{display:grid;grid-template-columns:1.3fr 1fr 1fr auto;gap:10px;align-items:end}
label{display:block;font-weight:bold;font-size:13px;margin-bottom:5px}input,select{width:100%;padding:9px;border:1px solid #ccd5df;border-radius:8px}
table{width:100%;border-collapse:collapse}th,td{padding:10px;border-bottom:1px solid #e5e7eb;text-align:left;vertical-align:middle;font-size:14px}.muted{color:#64748b}.tag{display:inline-block;padding:4px 8px;border-radius:999px;background:#e8f5e9;color:#166534;font-size:12px}.tag.off{background:#fee2e2;color:#991b1b}
.inline{display:flex;gap:6px;align-items:center;flex-wrap:wrap}.inline form{margin:0}
@media(max-width:900px){.grid{grid-template-columns:1fr}.formgrid{grid-template-columns:1fr}table{font-size:13px}.card{overflow:auto}}
</style></head><body><div class="wrap">
<div class="top"><div><h1 style="margin:0 0 5px">Administrador</h1><div>Usuários, aparelhos e vínculos de localização.</div></div>
<div><a class="btn light" href="painel.php">Meu painel</a> <a class="btn light" href="logout.php">Sair</a></div></div>

<?php if($msg):?><div class="card ok"><?php echo h($msg);?></div><?php endif;?>
<?php if($erro):?><div class="card erro"><?php echo h($erro);?></div><?php endif;?>

<div class="card"><h2>Novo usuário</h2><form method="post" class="formgrid">
<input type="hidden" name="csrf" value="<?php echo h(csrfToken());?>"><input type="hidden" name="acao" value="criar_usuario">
<div><label>Nome</label><input name="nome" required></div><div><label>Usuário</label><input name="usuario" required></div>
<div><label>Senha inicial</label><input type="password" name="senha" minlength="8" required></div><button class="btn">Criar usuário</button></form></div>

<div class="card"><h2>Aparelhos</h2><table><thead><tr><th>Aparelho</th><th>Usuário</th><th>Última posição</th><th>Vincular</th></tr></thead><tbody>
<?php foreach($dispositivos as $d):?><tr>
<td><strong><?php echo h($d['nome']);?></strong><div class="muted">ID <?php echo (int)$d['id'];?></div></td>
<td><?php echo $d['usuario_nome']?h($d['usuario_nome']).' ('.h($d['login_usuario']).')':'<span class="tag off">Sem usuário</span>';?></td>
<td><?php echo $d['ultima_posicao']?h($d['ultima_posicao']):'-';?></td>
<td><form method="post" class="inline"><input type="hidden" name="csrf" value="<?php echo h(csrfToken());?>"><input type="hidden" name="acao" value="vincular"><input type="hidden" name="dispositivo_id" value="<?php echo (int)$d['id'];?>">
<select name="usuario_id" style="min-width:190px"><option value="0">-- Sem usuário --</option>
<?php foreach($usuariosComuns as $uu):?><option value="<?php echo (int)$uu['id'];?>" <?php echo (int)$d['usuario_id']===(int)$uu['id']?'selected':'';?>><?php echo h($uu['nome']);?> (<?php echo h($uu['usuario']);?>)</option><?php endforeach;?>
</select><button class="btn">Salvar</button></form></td>
</tr><?php endforeach;?>
<?php if(!$dispositivos):?><tr><td colspan="4" class="muted">Nenhum aparelho cadastrado.</td></tr><?php endif;?>
</tbody></table></div>

<div class="card"><h2>Usuários</h2><table><thead><tr><th>Nome</th><th>Login</th><th>Perfil</th><th>Aparelhos</th><th>Status</th><th>Ações</th></tr></thead><tbody>
<?php foreach($usuarios as $uu):?><tr><td><?php echo h($uu['nome']);?></td><td><?php echo h($uu['usuario']);?></td><td><?php echo h($uu['perfil']);?></td>
<td><?php echo (int)$uu['qtd_dispositivos'];?></td><td><span class="tag <?php echo (int)$uu['ativo']===1?'':'off';?>"><?php echo (int)$uu['ativo']===1?'Ativo':'Inativo';?></span></td>
<td><div class="inline">
<?php if($uu['perfil']==='USUARIO'):?>
<a class="btn light" href="admin_usuario.php?id=<?php echo (int)$uu['id'];?>">Ver localização</a>
<form method="post"><input type="hidden" name="csrf" value="<?php echo h(csrfToken());?>"><input type="hidden" name="acao" value="toggle_usuario"><input type="hidden" name="id" value="<?php echo (int)$uu['id'];?>"><button class="btn <?php echo (int)$uu['ativo']===1?'danger':'';?>"><?php echo (int)$uu['ativo']===1?'Desativar':'Ativar';?></button></form>
<form method="post" class="inline" onsubmit="return confirm('Alterar a senha deste usuário?')"><input type="hidden" name="csrf" value="<?php echo h(csrfToken());?>"><input type="hidden" name="acao" value="reset_senha"><input type="hidden" name="id" value="<?php echo (int)$uu['id'];?>"><input type="password" name="senha" minlength="8" placeholder="Nova senha" style="width:120px" required><button class="btn light">Senha</button></form>
<?php else:?><span class="muted">Administrador</span><?php endif;?>
</div></td></tr><?php endforeach;?>
</tbody></table></div>
</div></body></html>
