import { KeyRound, Settings2 } from "lucide-react";
import { resetAccountPasswordAction, updateSettingsAction } from "@/app/actions/admin";
import { Notice } from "@/components/dashboard/notice";
import { PageHeader } from "@/components/dashboard/page-header";
import { SubmitButton } from "@/components/forms/submit-button";
import { Card } from "@/components/ui/card";
import { Input } from "@/components/ui/input";
import { Label } from "@/components/ui/label";
import { DEFAULT_MONTHLY_SUPPORT } from "@/lib/constants";
import { createAdminSupabaseClient } from "@/lib/supabase/admin";

export default async function SettingsPage({ searchParams }: { searchParams: Promise<{ success?: string; error?: string }> }) {
  const messages = await searchParams;
  const supabase = createAdminSupabaseClient();
  const [{ data }, { data: accounts }] = await Promise.all([
    supabase.from("app_settings").select("key,value"),
    supabase
      .from("profiles")
      .select("id,role,full_name,phone,is_active")
      .is("deleted_at", null)
      .order("role")
      .order("full_name")
  ]);
  const values = new Map((data ?? []).map((item) => [item.key, item.value]));

  return (
    <>
      <PageHeader title="الإعدادات" description="قيم تشغيلية عامة. أسرار Supabase ومسار الملفات تُضبط في متغيرات الخادم فقط." />
      <Notice success={messages.success} error={messages.error} />
      <div className="grid min-w-0 gap-6 xl:grid-cols-2">
        <Card className="min-w-0 p-5 sm:p-6">
          <div className="mb-5 flex items-center gap-2">
            <Settings2 size={19} className="text-[var(--primary)]" aria-hidden />
            <h2 className="font-black">الإعدادات العامة</h2>
          </div>
          <form action={updateSettingsAction} className="grid gap-5">
            <div><Label>اسم المؤسسة</Label><Input name="organizationName" defaultValue={String(values.get("organization_name") ?? "منصة كفالة")} required /></div>
            <div><Label>قيمة الكفالة الافتراضية (ج.س)</Label><Input name="defaultAmount" type="number" min={1000} defaultValue={Number(values.get("default_monthly_support") ?? DEFAULT_MONTHLY_SUPPORT)} required /></div>
            <div><Label>مدة خمول الجلسة بالدقائق</Label><Input name="idleMinutes" type="number" min={5} max={1440} defaultValue={Number(values.get("session_idle_minutes") ?? 30)} required /></div>
            <SubmitButton pendingText="جارٍ حفظ الإعدادات..." className="w-full sm:w-auto sm:justify-self-start">حفظ الإعدادات</SubmitButton>
          </form>
        </Card>

        <Card className="min-w-0 p-5 sm:p-6">
          <div className="mb-2 flex items-center gap-2">
            <KeyRound size={19} className="text-[var(--primary)]" aria-hidden />
            <h2 className="font-black">إعادة تعيين كلمة مرور أي حساب</h2>
          </div>
          <p className="mb-5 text-sm leading-7 text-[var(--ink-soft)]">
            اختر حساب مسؤول أو متبرع وأنشئ له كلمة مرور جديدة دون الحاجة إلى معرفة كلمة المرور القديمة.
          </p>
          <form action={resetAccountPasswordAction} className="grid gap-5">
            <input type="hidden" name="returnTo" value="/admin/settings" />
            <div>
              <Label>الحساب</Label>
              <select
                name="id"
                required
                className="h-11 w-full rounded-md border bg-white px-3 text-sm outline-none focus:border-[var(--primary)] focus:ring-4 focus:ring-[var(--focus)]"
              >
                <option value="">اختر الحساب</option>
                {(accounts ?? []).map((account) => (
                  <option key={account.id} value={account.id}>
                    {account.full_name} - {account.role === "admin" ? "مسؤول" : "متبرع"}
                    {account.phone ? ` - ${account.phone}` : ""}
                    {!account.is_active ? " - موقوف" : ""}
                  </option>
                ))}
              </select>
            </div>
            <div><Label>كلمة المرور الجديدة</Label><Input name="password" type="password" dir="ltr" minLength={6} autoComplete="new-password" required /></div>
            <div><Label>تأكيد كلمة المرور</Label><Input name="confirmation" type="password" dir="ltr" minLength={6} autoComplete="new-password" required /></div>
            <SubmitButton pendingText="جارٍ تعيين كلمة المرور..." variant="secondary" className="w-full sm:w-auto sm:justify-self-start">
              <KeyRound size={17} aria-hidden />
              تعيين كلمة المرور
            </SubmitButton>
          </form>
          <p className="mt-4 text-xs leading-6 text-[var(--ink-faint)]">
            تسجل العملية في سجل التدقيق، ولا تحفظ المنصة كلمة المرور الجديدة أو تعرضها بعد الإرسال.
          </p>
        </Card>
      </div>
    </>
  );
}
