"use client";

import { useEffect, useState } from "react";
import { AppShell } from "@/components/app/AppShell";
import { Alert } from "@/components/ui/Alert";
import { Button } from "@/components/ui/Button";
import { Field, Input } from "@/components/ui/Field";
import { ApiError, apiGet, apiPut } from "@/lib/api";
import { hasPermission } from "@/lib/permissions";

export default function SchoolPasswordPolicyPage() {
  const canManage = hasPermission("iam.user.manage");
  const [staffDays, setStaffDays] = useState("180");
  const [studentDays, setStudentDays] = useState("180");
  const [loading, setLoading] = useState(true);
  const [saving, setSaving] = useState(false);
  const [error, setError] = useState<string | null>(null);
  const [message, setMessage] = useState<string | null>(null);

  useEffect(() => {
    (async () => {
      setLoading(true);
      setError(null);
      try {
        const data = await apiGet<{ staff_max_age_days: number; student_max_age_days: number }>(
          "/auth/password-policy",
        );
        setStaffDays(String(data.staff_max_age_days));
        setStudentDays(String(data.student_max_age_days));
      } catch (err) {
        setError(err instanceof ApiError ? err.message : "خطا در بارگذاری تنظیمات");
      } finally {
        setLoading(false);
      }
    })();
  }, []);

  const save = async () => {
    setSaving(true);
    setError(null);
    setMessage(null);
    try {
      const data = await apiPut<{ staff_max_age_days: number; student_max_age_days: number }>(
        "/auth/password-policy",
        {
          staff_max_age_days: Number(staffDays),
          student_max_age_days: Number(studentDays),
        },
      );
      setStaffDays(String(data.staff_max_age_days));
      setStudentDays(String(data.student_max_age_days));
      setMessage("مدت اعتبار رمز عبور ذخیره شد. مقدار صفر یعنی اجبار دوره‌ای برای آن گروه خاموش است.");
    } catch (err) {
      setError(err instanceof ApiError ? err.message : "ذخیره تنظیمات ناموفق بود.");
    } finally {
      setSaving(false);
    }
  };

  return (
    <AppShell title="سیاست رمز عبور" subtitle="مدت اعتبار جدا برای کارمندان و دانش‌آموزان">
      {error ? <Alert tone="error">{error}</Alert> : null}
      {message ? <Alert tone="success">{message}</Alert> : null}
      {!canManage ? (
        <Alert tone="warning">اجازه ویرایش این تنظیمات را ندارید.</Alert>
      ) : loading ? (
        <p className="text-sm text-[var(--muted)]">در حال بارگذاری…</p>
      ) : (
        <div className="max-w-lg space-y-4 rounded-2xl border border-[var(--border)] bg-white p-4 shadow-card">
          <p className="text-sm text-[var(--muted)]">
            پس از پایان این مدت، کاربر تا تغییر رمز به سامانه دسترسی ندارد. اجبار تغییر در اولین ورود جدا از این تنظیم است.
            متن و کانال کد تأیید تغییر رمز را از «پیامک و اطلاع‌رسانی» مدیریت کنید.
          </p>
          <Field label="اعتبار رمز کارمندان (روز)">
            <Input
              type="number"
              min={0}
              max={3650}
              value={staffDays}
              onChange={(event) => setStaffDays(event.target.value)}
            />
          </Field>
          <Field label="اعتبار رمز دانش‌آموزان (روز)">
            <Input
              type="number"
              min={0}
              max={3650}
              value={studentDays}
              onChange={(event) => setStudentDays(event.target.value)}
            />
          </Field>
          <Button loading={saving} onClick={() => void save()}>
            ذخیره
          </Button>
        </div>
      )}
    </AppShell>
  );
}
