---
// Admin: one user. Their role, their permissions (grants, for moderators) and account actions, each in its own section.
import Base from '../../../layouts/Base.astro';
import Icon from '../../../components/Icon.astro';
import AdminNav from '../../../components/AdminNav.astro';
import { api } from '../../../lib/api';
import { asUser, COOKIE } from '../../../lib/auth';
import { ud } from '../../../lib/urdu';
import { ROLE, ROLE_HINT, SCOPE, CONTENT, ACTION, ago } from '../../../lib/roles';
const me = Astro.locals.user;
if (!me) return Astro.redirect(`/signin?next=${Astro.url.pathname}`);
if (me.role !== 'admin') return new Response('صرف ایڈمن کے لیے', { status: 403 });
const token = Astro.cookies.get(COOKIE)!.value, id = Number(Astro.params.id) || 0;
const poets: any[] = (await api('/api/poets')) ?? [];
let error = '', done = '', tempPassword = '';
if (Astro.request.method === 'POST') {
const f = await Astro.request.formData(), act = String(f.get('act'));
let target = String(f.get('target') ?? '').trim();
// a poet may be picked by name; the API takes a page link
const byName = poets.find((p) => p.name === target || p.nickname === target);
if (byName) target = byName.url;
const r = act === 'reset' ? await asUser(token, `/api/admin/users/${id}/password`, {})
: act === 'disable' || act === 'enable' ? await asUser(token, `/api/admin/users/${id}/disable`, { disabled: act === 'disable' })
: act === 'role' ? await asUser(token, `/api/admin/users/${id}/role`, { role: f.get('role') })
: act === 'delete' ? await asUser(token, `/api/admin/users/${id}/delete`, {})
: act === 'revoke' ? await asUser(token, `/api/admin/grants/${Number(f.get('grant'))}/delete`, {})
: act === 'grant' ? await asUser(token, `/api/admin/users/${id}/grants`, { scope: f.get('scope'), target, content: f.getAll('content'), actions: f.getAll('actions') })
: { ok: false, data: { error: 'نامعلوم عمل' } };
if (!r.ok) error = r.data.error ?? 'کچھ غلط ہو گیا';
else if (act === 'delete') return Astro.redirect('/admin');
else if (act === 'reset') tempPassword = r.data.password;
else done = { disable: 'اکاؤنٹ معطل کر دیا گیا', enable: 'اکاؤنٹ بحال کر دیا گیا', role: 'کردار بدل دیا گیا', revoke: 'اجازت واپس لے لی گئی', grant: 'اجازت دے دی گئی' }[act] ?? '';
}
const res = await asUser(token, `/api/admin/users/${id}/grants`);
if (res.status === 404) return new Response('صارف نہیں ملا', { status: 404 });
const { user, grants } = res.data;
const isMod = user.role.startsWith('mod-'), self = user.id === me.id;
const initial = [...(user.full_name || user.email)][0]?.toUpperCase();
---
شمولیت {ago(user.created_at)} · آخری لاگ ان {ago(user.last_sign_in)}
{error}
} {done &&{done}
} {tempPassword && (عارضی پاس ورڈ (صرف ایک بار دکھایا جا رہا ہے):
{tempPassword}
یہ پاس ورڈ صارف کو دیں؛ وہ لاگ ان کر کے اپنے اکاؤنٹ کے صفحے سے اسے بدل لیں۔
اپنا کردار خود نہیں بدل سکتے۔
: ( )}ابھی کوئی اجازت نہیں: یہ موڈریٹر کچھ نہیں بدل سکتا۔ نیچے سے اجازت دیں۔
}{SCOPE[g.scope]}{g.label && <>: {g.url ? {g.label} : g.label}>}{g.poet && g.scope !== 'poet' && ({g.poet})}
{g.content.map((c: string) => {CONTENT[c]})}{g.actions.map((a: string) => {ACTION[a]})}
اجازتیں موڈریٹرز کے لیے ہیں: اوپر سے کردار "موڈریٹر" کریں۔
}