<?php
require_once __DIR__.'/../config/config.php';require_once __DIR__.'/../config/database.php';require_once __DIR__.'/../includes/functions.php';require_once __DIR__.'/../includes/admin_functions.php';afRequireSuperAdmin();
if($_SERVER['REQUEST_METHOD']==='POST'){
 try{
  if(!validarCsrfToken($_POST[CSRF_TOKEN_NAME]??''))throw new RuntimeException('Sessão expirada.');$acao=(string)($_POST['acao']??'');
  if($acao==='criar'){afAdminCreateUser($pdo,(string)($_POST['nome']??''),(string)($_POST['email']??''),(string)($_POST['senha']??''),(string)($_POST['papel']??'moderador'),true,false);setFlash('success','Conta administrativa criada. A senha deverá ser alterada no primeiro acesso.');}
  else{$id=(int)($_POST['admin_id']??0);if($id<1)throw new RuntimeException('Conta inválida.');if($id===afAdminId()&&in_array($acao,['bloquear','inativar'],true))throw new RuntimeException('Você não pode bloquear a própria conta.');
   if(in_array($acao,['bloquear','inativar'],true)){$st=$pdo->prepare("SELECT papel FROM af_admin_users WHERE id=?");$st->execute([$id]);if($st->fetchColumn()==='administrador'&&(int)$pdo->query("SELECT COUNT(*) FROM af_admin_users WHERE papel='administrador' AND status='ativo'")->fetchColumn()<=1)throw new RuntimeException('O painel precisa manter pelo menos um administrador ativo.');}
   if($acao==='ativar')$pdo->prepare("UPDATE af_admin_users SET status='ativo',tentativas_falhas=0,bloqueado_ate=NULL,atualizado_em=NOW() WHERE id=?")->execute([$id]);
   elseif($acao==='bloquear'){$pdo->prepare("UPDATE af_admin_users SET status='bloqueado',atualizado_em=NOW() WHERE id=?")->execute([$id]);$pdo->prepare('UPDATE af_admin_sessions SET revogada_em=NOW() WHERE admin_user_id=? AND revogada_em IS NULL')->execute([$id]);}
   elseif($acao==='inativar'){$pdo->prepare("UPDATE af_admin_users SET status='inativo',atualizado_em=NOW() WHERE id=?")->execute([$id]);$pdo->prepare('UPDATE af_admin_sessions SET revogada_em=NOW() WHERE admin_user_id=? AND revogada_em IS NULL')->execute([$id]);}
   elseif($acao==='papel'){$papel=(string)($_POST['papel']??'moderador');if(!in_array($papel,['administrador','moderador'],true))throw new RuntimeException('Nível inválido.');if($id===afAdminId()&&$papel!=='administrador')throw new RuntimeException('Você não pode remover seu próprio nível de administrador.');if($papel!=='administrador'){$st=$pdo->prepare("SELECT papel FROM af_admin_users WHERE id=?");$st->execute([$id]);if($st->fetchColumn()==='administrador'&&(int)$pdo->query("SELECT COUNT(*) FROM af_admin_users WHERE papel='administrador' AND status='ativo'")->fetchColumn()<=1)throw new RuntimeException('O painel precisa manter pelo menos um administrador ativo.');}$pdo->prepare('UPDATE af_admin_users SET papel=?,atualizado_em=NOW() WHERE id=?')->execute([$papel,$id]);}
   elseif($acao==='senha'){$pass=(string)($_POST['nova_senha']??'');if($e=afAdminPasswordError($pass))throw new RuntimeException($e);$pdo->prepare('UPDATE af_admin_users SET senha_hash=?,force_password_change=1,tentativas_falhas=0,bloqueado_ate=NULL,senha_alterada_em=NOW(),atualizado_em=NOW() WHERE id=?')->execute([password_hash($pass,PASSWORD_DEFAULT),$id]);$pdo->prepare('UPDATE af_admin_sessions SET revogada_em=NOW() WHERE admin_user_id=? AND revogada_em IS NULL')->execute([$id]);}
   else throw new RuntimeException('Ação inválida.');afAdminLog($pdo,'equipe_'.$acao,'admin_user',$id,$_POST);setFlash('success','Conta administrativa atualizada.');}
 }catch(Throwable $e){setFlash('error',$e->getMessage());}
 header('Location: '.SITE_URL.'/admin/equipe.php');exit;
}
$admins=$pdo->query("SELECT a.*,(SELECT COUNT(*) FROM af_admin_sessions s WHERE s.admin_user_id=a.id AND s.revogada_em IS NULL AND s.expira_em>NOW()) sessoes_ativas FROM af_admin_users a ORDER BY FIELD(a.papel,'administrador','moderador'),a.nome")->fetchAll()?:[];
$pageTitle='Admin • Equipe';$showNav=false;$bodyClass='admin-body';$adminPage='equipe';require __DIR__.'/../includes/header.php';?>
<div class="admin-shell"><?php require __DIR__.'/../includes/admin_nav.php';?><main class="admin-main"><header class="admin-topbar"><div><small>CONTROLE DE ACESSO</small><h1>Equipe administrativa</h1></div><span class="admin-count"><?=count($admins)?> contas</span></header><?=renderFlash()?>
<div class="admin-grid-2"><section class="admin-panel"><header><div><small>NOVA CONTA</small><h2>Adicionar administrador</h2></div></header><form method="post" class="admin-form"><?=camposCsrf()?><input type="hidden" name="acao" value="criar"><label>Nome<input name="nome" required maxlength="120"></label><label>E-mail<input type="email" name="email" required maxlength="190"></label><label>Senha temporária<input type="password" name="senha" required><small>Mínimo de 10 caracteres, maiúscula, minúscula e número.</small></label><label>Nível<select name="papel"><option value="moderador">Moderador</option><option value="administrador">Administrador</option></select></label><button class="admin-primary">Criar conta</button></form></section>
<section class="admin-panel"><header><div><small>NÍVEIS</small><h2>Permissões</h2></div></header><div class="admin-help"><p><b>Administrador:</b> possui acesso completo, configurações e gestão da equipe.</p><p><b>Moderador:</b> gerencia usuários, partidas, denúncias, segurança e relatórios.</p><p>Contas administrativas são separadas das contas de jogadores.</p></div></section></div>
<section class="admin-panel"><div class="admin-table-wrap"><table class="admin-table"><thead><tr><th>Conta</th><th>Nível</th><th>Status</th><th>Acessos</th><th>Ações</th></tr></thead><tbody><?php foreach($admins as $a):?><tr><td><b><?=esc($a['nome'])?></b><small><?=esc($a['email'])?><br>Criada em <?=date('d/m/Y',strtotime($a['criado_em']))?></small></td><td><span class="admin-pill"><?=esc($a['papel'])?></span></td><td><span class="admin-pill"><?=esc($a['status'])?></span><small><?=$a['force_password_change']?'Troca de senha pendente':''?></small></td><td><?=(int)$a['sessoes_ativas']?> ativa(s)<small><?=!empty($a['ultimo_login'])?date('d/m/Y H:i',strtotime($a['ultimo_login'])):'Nunca acessou'?></small></td><td><form method="post" class="admin-inline-actions"><?=camposCsrf()?><input type="hidden" name="admin_id" value="<?=(int)$a['id']?>"><select name="acao"><option value="ativar">Ativar</option><option value="bloquear">Bloquear</option><option value="inativar">Inativar</option><option value="papel">Alterar nível</option><option value="senha">Nova senha temporária</option></select><select name="papel"><option value="moderador">Moderador</option><option value="administrador">Administrador</option></select><input type="password" name="nova_senha" placeholder="Senha temporária"><button>Aplicar</button></form></td></tr><?php endforeach;?></tbody></table></div></section>
</main></div><script src="<?=SITE_URL?>/assets/js/admin.js?v=14.1"></script><?php require __DIR__.'/../includes/footer.php';
