<?php
declare(strict_types=1);require __DIR__.'/_bootstrap.php';
if((admin_user()['role']??'')!=='super_admin'){http_response_code(403);exit('Yalnız süper yönetici erişebilir.');}
$editId=(int)($_GET['edit']??0);$edit=null;if($editId){$s=db()->prepare('SELECT id,name,email,role,is_active FROM users WHERE id=?');$s->execute([$editId]);$edit=$s->fetch();}
if(request_is_post()){
 verify_csrf();try{
  $id=(int)($_POST['id']??0);$name=admin_post_string('name');$email=mb_strtolower(admin_post_string('email'));$role=admin_post_string('role','manager');$password=(string)($_POST['password']??'');
  if($name===''||!filter_var($email,FILTER_VALIDATE_EMAIL))throw new RuntimeException('Ad ve geçerli e-posta zorunlu.');
  if(!in_array($role,['super_admin','manager','reception','editor'],true))throw new RuntimeException('Geçersiz rol.');
  if(!$id&&strlen($password)<10)throw new RuntimeException('Yeni hesap şifresi en az 10 karakter olmalıdır.');
  $newActive=!empty($_POST['is_active']);
  if($id===(int)admin_user()['id']&&!$newActive)throw new RuntimeException('Kendi hesabınızı pasife alamazsınız.');
  if($id){
   $currentStmt=db()->prepare('SELECT role,is_active FROM users WHERE id=?');$currentStmt->execute([$id]);$current=$currentStmt->fetch();
   if(!$current)throw new RuntimeException('Yönetici hesabı bulunamadı.');
   if($current['role']==='super_admin'&&($role!=='super_admin'||!$newActive)){$other=db()->prepare("SELECT COUNT(*) FROM users WHERE role='super_admin' AND is_active=1 AND id<>?");$other->execute([$id]);if((int)$other->fetchColumn()<1)throw new RuntimeException('Son aktif süper yönetici hesabı pasife alınamaz veya farklı role çevrilemez.');}
  }
  $exists=db()->prepare('SELECT COUNT(*) FROM users WHERE email=? AND id<>?');$exists->execute([$email,$id]);if((int)$exists->fetchColumn()>0)throw new RuntimeException('Bu e-posta zaten kayıtlı.');
  if($id){
   $params=[$name,$email,$role,$newActive?1:0];$sql='UPDATE users SET name=?,email=?,role=?,is_active=?,updated_at=NOW()';
   if($password!==''){if(strlen($password)<10)throw new RuntimeException('Şifre en az 10 karakter olmalıdır.');$sql.=',password_hash=?,must_change_password=1';$params[]=password_hash($password,PASSWORD_DEFAULT);}
   $sql.=' WHERE id=?';$params[]=$id;db()->prepare($sql)->execute($params);
  }else{
   db()->prepare('INSERT INTO users(name,email,password_hash,role,must_change_password,is_active,created_at,updated_at) VALUES(?,?,?,?,1,1,NOW(),NOW())')->execute([$name,$email,password_hash($password,PASSWORD_DEFAULT),$role]);$id=(int)db()->lastInsertId();
  }
  audit_log('save','users',$id);flash('success','Yönetici hesabı kaydedildi.');redirect('/admin/users.php');
 }catch(Throwable $e){flash('error',$e->getMessage());redirect('/admin/users.php'.(!empty($_POST['id'])?'?edit='.(int)$_POST['id']:''));}
}
$items=db()->query('SELECT id,name,email,role,is_active,last_login_at,created_at FROM users ORDER BY id')->fetchAll();admin_header('Yöneticiler');?>
<div class="split-admin"><div class="panel" style="margin-top:0"><div class="panel-head"><h2>Panel kullanıcıları</h2></div><div class="table-wrap"><table><thead><tr><th>Kullanıcı</th><th>Rol</th><th>Son giriş</th><th>Durum</th><th></th></tr></thead><tbody><?php foreach($items as $u):?><tr><td><b><?=e($u['name'])?></b><br><span class="muted"><?=e($u['email'])?></span></td><td><?=e($u['role'])?></td><td><?=e($u['last_login_at']?:'—')?></td><td><?=admin_status($u['is_active']?'active':'inactive')?></td><td><a class="button small secondary" href="?edit=<?=$u['id']?>">Düzenle</a></td></tr><?php endforeach;?></tbody></table></div></div>
<form class="panel" style="margin-top:0" method="post"><div class="panel-head"><h2><?=$edit?'Hesabı Düzenle':'Yeni Yönetici'?></h2></div><div class="panel-body"><?=csrf_field()?><input type="hidden" name="id" value="<?=e($edit['id']??0)?>"><label>Ad<input name="name" value="<?=e($edit['name']??'')?>" required></label><label>E-posta<input type="email" name="email" value="<?=e($edit['email']??'')?>" required></label><label>Rol<select name="role"><?php foreach(['super_admin'=>'Süper yönetici','manager'=>'Yönetici','reception'=>'Resepsiyon','editor'=>'Editör'] as $k=>$v):?><option value="<?=$k?>" <?=($edit['role']??'manager')===$k?'selected':''?>><?=$v?></option><?php endforeach;?></select></label><label><?=$edit?'Yeni şifre boşsa değişmez':'Şifre'?><input type="password" name="password" minlength="10" <?=$edit?'':'required'?>></label><label class="checkrow"><input type="checkbox" name="is_active" value="1" <?=!$edit||!empty($edit['is_active'])?'checked':''?>> Aktif</label><button class="button" type="submit">Kaydet</button></div></form></div>
<div class="panel"><div class="panel-head"><h2>Rol kapsamları</h2></div><div class="panel-body"><p><b>Resepsiyon</b> rezervasyon ve takvim işlemlerine erişir.</p><p><b>Editör</b> hizmet, makale, kurumsal sayfa ve içerik otomasyonunu yönetir.</p><p><b>Yönetici</b> kullanıcı hesapları dışındaki tüm operasyon alanlarına erişir.</p><p><b>Süper yönetici</b> tüm alanlara ve kullanıcı yönetimine erişir.</p></div></div><?php admin_footer();?>
