// Login + signup + forgot-password flow.
// Tenant is auto-detected from email → dropdown shown if email belongs to >1 company.

const SUPER_ADMIN_EMAIL = "superadmin@raciworks.io";

// Build a global index of email → [tenant] for the prototype:
// in real life this is a backend lookup; for the demo, we union the tenant admins,
// demo accounts, and the users table (ABC tenant) so the UX feels realistic.
const emailToTenants = (emailLower) => {
  const set = new Map(); // tenant_id -> role hint
  if (!emailLower) return [];
  // tenant admins
  Object.entries(TENANT_ADMIN_USERS).forEach(([tid, a]) => {
    if (a.email.toLowerCase() === emailLower) set.set(tid, { role: "admin", user_id: null });
  });
  // demo accounts
  DEMO_ACCOUNTS.forEach(d => {
    if (d.email.toLowerCase() === emailLower && d.tenant_code) {
      const t = TENANTS.find(x => x.tenant_code === d.tenant_code);
      if (t && !set.has(t.id)) set.set(t.id, { role: d.role, user_id: d.user_id || null });
    }
  });
  // ABC tenant employees
  USERS.forEach(u => {
    if (u.email.toLowerCase() === emailLower && u.status === "active") {
      const tid = "t_abc";
      if (!set.has(tid)) set.set(tid, { role: u.system_role, user_id: u.id });
    }
  });
  return Array.from(set.entries()).map(([tid, info]) => ({ tenant: TENANTS.find(t => t.id === tid), ...info }));
};

// Build the global list of all known emails — used for signup duplicate-check
const allKnownEmails = () => {
  const set = new Set();
  set.add(SUPER_ADMIN_EMAIL);
  Object.values(TENANT_ADMIN_USERS).forEach(a => set.add(a.email.toLowerCase()));
  DEMO_ACCOUNTS.forEach(d => set.add(d.email.toLowerCase()));
  USERS.forEach(u => set.add(u.email.toLowerCase()));
  return set;
};

const LoginScreen = ({ onLogin }) => {
  const [mode, setMode] = useState("login"); // login | signup | change
  const [email, setEmail] = useState("");
  const [pwd, setPwd] = useState("");
  const [remember, setRemember] = useState(true);
  const [err, setErr] = useState("");
  const [busy, setBusy] = useState(false);
  const [showPwd, setShowPwd] = useState(false);
  const [demoOpen, setDemoOpen] = useState(true);
  const [selectedTenantId, setSelectedTenantId] = useState(null);
  const [apiMatches, setApiMatches] = useState([]);
  // Tracks whether email exists in users table at all (vs. zero memberships)
  const [apiUserExists, setApiUserExists] = useState(null); // null=unknown, true/false=resolved

  // When email changes, recompute tenant matches & reset selection if needed
  const emailLower = email.trim().toLowerCase();
  const isSuperAdminEmail = emailLower === SUPER_ADMIN_EMAIL;
  const localMatches = useMemo(
    () => isSuperAdminEmail ? [] : emailToTenants(emailLower),
    [emailLower, isSuperAdminEmail]
  );

  // Merge local + API matches (de-duped by tenant.id)
  const tenantMatches = useMemo(() => {
    const map = new Map();
    localMatches.forEach(m => { if (m.tenant) map.set(m.tenant.id, m); });
    apiMatches.forEach(m => { if (m.tenant && !map.has(m.tenant.id)) map.set(m.tenant.id, m); });
    return Array.from(map.values());
  }, [localMatches, apiMatches]);

  // Look up email via API (debounced) — also tells us if user identity exists at all
  useEffect(() => {
    if (!emailLower || isSuperAdminEmail || typeof window === "undefined" || !window.apiClient) {
      setApiMatches([]);
      setApiUserExists(null);
      return;
    }
    let cancelled = false;
    const handle = setTimeout(async () => {
      try {
        const res = await window.apiClient.findUserByEmail(emailLower);
        if (cancelled) return;
        const userExists = !!(res && res.user_exists);
        setApiUserExists(userExists);
        const tenants = (res && res.tenants) || [];
        setApiMatches(tenants.map(r => ({
          tenant: {
            id: r.tenant_id,
            tenant_code: r.tenant_code,
            company_name: r.company_name,
            service_status: r.service_status,
            accent: "indigo",
          },
          role: r.role || "admin",
          user_id: res?.user?.user_id || null,
        })));
      } catch (e) {
        if (!cancelled) { setApiMatches([]); setApiUserExists(null); }
      }
    }, 250);
    return () => { cancelled = true; clearTimeout(handle); };
  }, [emailLower, isSuperAdminEmail]);

  useEffect(() => {
    // Auto-select if there's exactly one match; clear if 0 or selection no longer valid
    if (tenantMatches.length === 1) setSelectedTenantId(tenantMatches[0].tenant.id);
    else if (!tenantMatches.find(m => m.tenant.id === selectedTenantId)) setSelectedTenantId(null);
  }, [emailLower, tenantMatches.length]);

  const submitLogin = async (e) => {
    e?.preventDefault?.();
    setErr("");
    if (!email) { setErr("กรุณากรอกอีเมล"); return; }
    if (!pwd) { setErr("กรุณากรอกรหัสผ่าน"); return; }

    // Require explicit tenant selection when multiple memberships detected
    if (!isSuperAdminEmail && tenantMatches.length > 1 && !selectedTenantId) {
      setErr("คุณเป็นสมาชิกของหลายบริษัท · กรุณาเลือกบริษัทที่ต้องการเข้า");
      return;
    }

    setBusy(true);
    try {
      // Try real API login first
      if (typeof window !== "undefined" && window.apiClient) {
        // For single-tenant or already-selected → pass tenantId. Otherwise let server respond with multiple_tenants.
        const tenantId = selectedTenantId || (tenantMatches.length === 1 ? tenantMatches[0].tenant.id : null);
        const result = await window.apiClient.login(emailLower, pwd, tenantId);

        // Super Admin login path
        if (result.super_admin) {
          setBusy(false);
          onLogin({
            kind: "super_admin",
            email: result.user.email,
            user_id: result.user.user_id,
            first_name: result.user.first_name,
            last_name: result.user.last_name,
            token: result.token,
          });
          return;
        }

        // Server says user identity is valid but has no tenant memberships
        if (result.no_tenant) {
          setBusy(false);
          setErr("บัญชีของคุณยังไม่ได้ถูกผูกกับบริษัทใดในระบบ · กรุณาติดต่อผู้ดูแลระบบ");
          return;
        }

        // Server may return multiple tenants — ask user to pick
        if (result.multiple_tenants) {
          setBusy(false);
          setErr("กรุณาเลือกบริษัทก่อนเข้าสู่ระบบ");
          return;
        }

        setBusy(false);
        onLogin({
          kind: "tenant",
          tenant_id: result.tenant.id,
          role: result.user.role,
          user_id: result.user.user_id,
          email: result.user.email,
          first_name: result.user.first_name,
          last_name: result.user.last_name,
          token: result.token,
          tenant: result.tenant,
        });
        return;
      }

      // Fallback to local demo (no API available)
      if (tenantMatches.length === 0) {
        setErr("ไม่พบอีเมลนี้ในระบบ · กรุณาติดต่อผู้ดูแลระบบหรือสร้างบัญชีใหม่");
        setBusy(false);
        return;
      }
      const tenantId = selectedTenantId || tenantMatches[0].tenant.id;
      const match = tenantMatches.find(m => m.tenant.id === tenantId);
      if (!match) { setErr("กรุณาเลือกบริษัท"); setBusy(false); return; }
      setTimeout(() => {
        setBusy(false);
        onLogin({
          kind:"tenant",
          tenant_id: match.tenant.id,
          role: match.role || "admin",
          user_id: match.user_id || null,
          email,
        });
      }, 350);
    } catch (apiErr) {
      setBusy(false);
      if (apiErr.status === 401) setErr("อีเมลหรือรหัสผ่านไม่ถูกต้อง");
      else if (apiErr.status === 403) setErr("บริษัทของท่านถูกระงับการใช้งาน");
      else if (apiErr.status === 423) setErr("บัญชีถูกล็อกชั่วคราว เนื่องจากใส่รหัสผ่านผิดหลายครั้ง กรุณารอ 15 นาที");
      else setErr(apiErr.message || "ไม่สามารถเข้าสู่ระบบได้ กรุณาลองอีกครั้ง");
    }
  };

  const fillDemo = (acct) => {
    setMode("login");
    setEmail(acct.email);
    setPwd("");
    setErr("");
    // selectedTenantId will auto-set via useEffect when email recomputes
  };

  return (
    <div className="min-h-screen w-full flex">
      {/* LEFT — brand panel */}
      <div className="hidden lg:flex w-[46%] sa-bg text-white relative overflow-hidden flex-col">
        <div className="absolute inset-0 opacity-20" style={{
          backgroundImage:"radial-gradient(rgba(255,255,255,.35) 1px, transparent 1px)",
          backgroundSize:"22px 22px"
        }}/>
        <div className="relative z-10 p-10 flex flex-col h-full">
          <div className="flex items-center gap-2.5">
            <div className="w-9 h-9 rounded-xl bg-white/10 ring-1 ring-white/30 flex items-center justify-center">
              <Icon name="layers" size={18}/>
            </div>
            <div>
              <div className="text-[15px] font-bold tracking-tight">RACI Workspace</div>
              <div className="text-[10.5px] uppercase tracking-[.2em] text-indigo-200/80">Multi-tenant SaaS</div>
            </div>
          </div>

          <div className="my-auto py-12">
            <div className="text-[12px] uppercase tracking-[.22em] text-indigo-200/80 mb-3">Daily Responsibility Matrix</div>
            <h1 className="text-[40px] leading-[1.1] font-bold tracking-tight">ระบบบริหารงานประจำวัน<br/>ตามหลัก <span className="text-indigo-300">RACI</span></h1>
            <p className="mt-4 text-indigo-100/85 text-[14px] leading-relaxed max-w-md">
              จัดทำ ตรวจสอบ ติดตามสถานะรายวันของทุกกระบวนการในองค์กร ภายในระบบเดียวที่แยกข้อมูลแต่ละบริษัทอย่างสมบูรณ์ปลอดภัย
            </p>
            <div className="mt-7 grid grid-cols-2 gap-3 max-w-md">
              {[
                { i:"shield", t:"Tenant Isolation", s:"ข้อมูลแต่ละบริษัทแยกฐานข้อมูล" },
                { i:"workflow", t:"R / A / C / I", s:"กำหนดบทบาทชัดเจน" },
                { i:"checkCircle", t:"Daily Status", s:"P → A → C → S" },
                { i:"dashboard", t:"Executive Dashboard", s:"มอนิเตอร์ภาพรวมแบบ Real-time" },
              ].map((f,i) => (
                <div key={i} className="rounded-xl border border-white/10 bg-white/5 p-3">
                  <Icon name={f.i} size={16} className="text-indigo-300"/>
                  <div className="text-[13px] font-semibold mt-1.5">{f.t}</div>
                  <div className="text-[11px] text-indigo-200/75 mt-0.5">{f.s}</div>
                </div>
              ))}
            </div>
          </div>

          <div className="text-[11px] text-indigo-200/60 flex items-center justify-between">
            <span>© 2026 RACI Workspace — Demo prototype</span>
            <span className="font-mono">v1.4.0</span>
          </div>
        </div>
      </div>

      {/* RIGHT — form */}
      <div className="flex-1 flex items-center justify-center p-6 bg-ink-50">
        <div className="w-full max-w-[440px]">
          <div className="lg:hidden flex items-center gap-2.5 mb-6">
            <div className="w-9 h-9 rounded-xl bg-ink-900 text-white flex items-center justify-center"><Icon name="layers" size={18}/></div>
            <div className="font-bold text-ink-900">RACI Workspace</div>
          </div>

          {mode === "login" && (
            <form onSubmit={submitLogin} className="bg-white rounded-2xl border border-ink-100 shadow-sm p-7">
              <div className="text-[11px] uppercase tracking-[.2em] text-brand-600 font-semibold">ลงชื่อเข้าใช้</div>
              <h2 className="text-[22px] font-bold text-ink-900 mt-1">ยินดีต้อนรับกลับมา</h2>
              <p className="text-[13px] text-ink-500 mt-1">กรอกอีเมลของคุณ ระบบจะค้นหาบริษัทให้อัตโนมัติ</p>

              <div className="mt-5 space-y-3.5">
                <Field label="อีเมล หรือชื่อผู้ใช้" required>
                  <Input type="email" value={email} onChange={e=>setEmail(e.target.value)} placeholder="you@company.co.th" autoFocus/>
                  {email && !isSuperAdminEmail && apiUserExists === false && tenantMatches.length === 0 && (
                    <div className="mt-1.5 text-[11px] text-amber-600 flex items-center gap-1"><Icon name="alert" size={11}/>ไม่พบอีเมลนี้ในระบบ</div>
                  )}
                </Field>

                {/* Tenant picker — appears when email exists (with or without tenants) */}
                {!isSuperAdminEmail && (apiUserExists === true || tenantMatches.length > 0) && (
                  <Field label="บริษัทที่ต้องการเข้าใช้" hint={
                    tenantMatches.length === 0 ? "บัญชีนี้ยังไม่ได้ผูกกับบริษัทใด"
                    : tenantMatches.length > 1 ? `คุณมีบัญชีอยู่ ${tenantMatches.length} บริษัท`
                    : "ตรวจพบบริษัทอัตโนมัติ"
                  }>
                    {tenantMatches.length === 0 ? (
                      <div className="flex items-center gap-2 px-3 py-2.5 rounded-lg border border-amber-200 bg-amber-50">
                        <Icon name="alert" size={14} className="text-amber-600 shrink-0"/>
                        <div className="flex-1">
                          <div className="text-[12.5px] font-semibold text-amber-900">ไม่มีบริษัทที่ลงทะเบียน</div>
                          <div className="text-[11px] text-amber-700/80 mt-0.5">กรุณาให้ผู้ดูแลระบบเพิ่มคุณเป็นพนักงานของบริษัทก่อน</div>
                        </div>
                      </div>
                    ) : tenantMatches.length === 1 ? (
                      <div className="flex items-center gap-2 px-3 py-2 rounded-lg border border-emerald-200 bg-emerald-50">
                        <span className="w-7 h-7 rounded-md bg-gradient-to-br from-indigo-500 to-indigo-700 text-white text-[10px] font-bold flex items-center justify-center shrink-0">{tenantMatches[0].tenant.tenant_code}</span>
                        <div className="flex-1 min-w-0">
                          <div className="text-[12.5px] font-semibold text-ink-900 truncate">{tenantMatches[0].tenant.company_short || tenantMatches[0].tenant.company_name}</div>
                          <div className="text-[10.5px] text-ink-500 truncate">{ROLE_META[tenantMatches[0].role]?.label || tenantMatches[0].role}</div>
                        </div>
                        <Icon name="checkCircle" size={14} className="text-emerald-600"/>
                      </div>
                    ) : (
                      <div className="grid gap-1.5">
                        {tenantMatches.map(m => {
                          const t = m.tenant;
                          const sel = selectedTenantId === t.id;
                          const blocked = t.service_status !== "active";
                          return (
                            <button type="button" key={t.id} onClick={()=>setSelectedTenantId(t.id)}
                              className={`flex items-center gap-2.5 px-3 py-2 rounded-lg border text-left transition ${sel?"border-brand-500 bg-brand-50 ring-2 ring-brand-100":"border-ink-200 hover:bg-ink-50"} ${blocked?"opacity-70":""}`}>
                              <span className="w-7 h-7 rounded-md bg-gradient-to-br from-indigo-500 to-indigo-700 text-white text-[10px] font-bold flex items-center justify-center shrink-0">{t.tenant_code}</span>
                              <div className="flex-1 min-w-0">
                                <div className="text-[12.5px] font-semibold text-ink-900 truncate">{t.company_short || t.company_name}</div>
                                <div className="text-[10.5px] text-ink-500 truncate">{ROLE_META[m.role]?.label || m.role}{blocked ? ` · ${t.service_status === "suspended" ? "ระงับการใช้งาน" : "สิ้นสุดบริการ"}` : ""}</div>
                              </div>
                              {sel && <Icon name="check" size={13} className="text-brand-600"/>}
                            </button>
                          );
                        })}
                      </div>
                    )}
                  </Field>
                )}

                {isSuperAdminEmail && (
                  <div className="px-3 py-2 rounded-lg bg-indigo-50 border border-indigo-100 text-indigo-700 text-[11.5px] flex items-center gap-2">
                    <Icon name="shield" size={12}/>เข้าสู่ระบบในฐานะ <strong>Super Admin (SaaS Owner)</strong>
                  </div>
                )}

                <Field label="รหัสผ่าน" required>
                  <div className="relative">
                    <Input type={showPwd?"text":"password"} value={pwd} onChange={e=>setPwd(e.target.value)} placeholder="••••••••" className="pr-10"/>
                    <button type="button" onClick={()=>setShowPwd(v=>!v)} className="absolute right-2.5 top-1/2 -translate-y-1/2 text-ink-400 hover:text-ink-700">
                      <Icon name={showPwd?"eyeOff":"eye"} size={15}/>
                    </button>
                  </div>
                </Field>
              </div>

              <div className="mt-3 flex items-center justify-between">
                <Checkbox checked={remember} onChange={()=>setRemember(v=>!v)} label="จดจำการเข้าสู่ระบบ"/>
                <button type="button" onClick={()=>setMode("change")} className="text-[12.5px] text-brand-600 hover:text-brand-700 font-medium">เปลี่ยนรหัสผ่าน</button>
              </div>

              {err && (
                <div className="mt-4 px-3 py-2.5 rounded-lg bg-rose-50 border border-rose-100 text-rose-700 text-[12.5px] flex items-start gap-2">
                  <Icon name="alert" size={14} className="mt-0.5 shrink-0"/><span>{err}</span>
                </div>
              )}

              <Button size="lg" className="w-full mt-5" type="submit" disabled={busy}>
                {busy ? "กำลังตรวจสอบ…" : "เข้าสู่ระบบ"}
                <Icon name="arrowRight" size={15}/>
              </Button>

              <div className="my-5 flex items-center gap-3">
                <div className="flex-1 h-px bg-ink-100"/>
                <div className="text-[11px] text-ink-400 uppercase tracking-wider">หรือ</div>
                <div className="flex-1 h-px bg-ink-100"/>
              </div>

              <div className="text-center text-[12.5px] text-ink-500">
                ยังไม่มีบัญชี? <button type="button" onClick={()=>setMode("signup")} className="text-brand-600 hover:text-brand-700 font-medium">ขอสร้างบัญชีใหม่</button>
              </div>
            </form>
          )}

          {mode === "signup" && <SignupForm onBack={()=>setMode("login")}/>}
          {mode === "change" && <ChangePasswordForm initialEmail={email} onBack={()=>setMode("login")}/>}

          {/* Demo accounts */}
          <div className="mt-5 bg-white rounded-2xl border border-ink-100 overflow-hidden">
            <button onClick={()=>setDemoOpen(v=>!v)} className="w-full flex items-center justify-between px-4 py-3 text-left hover:bg-ink-50/60 transition">
              <div className="flex items-center gap-2">
                <Icon name="sparkles" size={14} className="text-amber-500"/>
                <div className="text-[12.5px] font-semibold text-ink-800">บัญชีทดสอบ (Demo)</div>
              </div>
              <Icon name={demoOpen?"chevronUp":"chevronDown"} size={14} className="text-ink-400"/>
            </button>
            {demoOpen && (
              <div className="px-2 pb-2 grid gap-1.5">
                {DEMO_ACCOUNTS.map((d,i) => (
                  <button key={i} onClick={()=>fillDemo(d)} className="flex items-center gap-2.5 px-2 py-2 hover:bg-ink-50 rounded-lg text-left transition">
                    <span className={`w-7 h-7 rounded-md text-white text-[10px] font-bold flex items-center justify-center ${d.color}`}>
                      {d.tenant_code || "SA"}
                    </span>
                    <div className="flex-1 min-w-0">
                      <div className="text-[12.5px] font-medium text-ink-800 truncate">{d.label}</div>
                      <div className="text-[10.5px] text-ink-500 font-mono truncate">{d.email}</div>
                    </div>
                    <Icon name="arrowRight" size={12} className="text-ink-400"/>
                  </button>
                ))}
              </div>
            )}
          </div>
        </div>
      </div>
    </div>
  );
};

const SignupForm = ({ onBack }) => {
  const [submitted, setSubmitted] = useState(false);
  const [busy, setBusy] = useState(false);
  const [err, setErr] = useState("");
  const [form, setForm] = useState({
    full_name: "", email: "", phone: "", password: "", password2: "",
  });
  const set = (k,v) => setForm(p => ({...p, [k]: v}));
  const [emailStatus, setEmailStatus] = useState({ checking: false, available: null });

  // Live-check email uniqueness (debounced)
  useEffect(() => {
    if (!form.email || !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(form.email)) {
      setEmailStatus({ checking: false, available: null });
      return;
    }
    let cancelled = false;
    setEmailStatus(s => ({ ...s, checking: true }));
    const handle = setTimeout(async () => {
      try {
        if (!window.apiClient) return;
        const res = await window.apiClient.checkEmailAvailable(form.email);
        if (!cancelled) setEmailStatus({ checking: false, available: !!res.available });
      } catch {
        if (!cancelled) setEmailStatus({ checking: false, available: null });
      }
    }, 350);
    return () => { cancelled = true; clearTimeout(handle); };
  }, [form.email]);

  const submit = async (e) => {
    e.preventDefault();
    setErr("");
    if (!form.full_name.trim()) { setErr("กรุณากรอกชื่อ-นามสกุล"); return; }
    if (!form.email.trim()) { setErr("กรุณากรอกอีเมล"); return; }
    if (emailStatus.available === false) { setErr("อีเมลนี้มีบัญชีในระบบแล้ว · กรุณาใช้อีเมลอื่น"); return; }
    if (form.password !== form.password2) { setErr("รหัสผ่านไม่ตรงกัน"); return; }
    if (form.password.length < 6) { setErr("รหัสผ่านอย่างน้อย 6 ตัว"); return; }

    setBusy(true);
    try {
      if (typeof window !== "undefined" && window.apiClient) {
        await window.apiClient.signup({
          full_name: form.full_name,
          email: form.email,
          phone: form.phone,
          password: form.password,
        });
      }
      setSubmitted(true);
    } catch (apiErr) {
      setErr(apiErr.message || "ไม่สามารถสร้างบัญชีได้ กรุณาลองอีกครั้ง");
    } finally {
      setBusy(false);
    }
  };

  return (
    <div className="bg-white rounded-2xl border border-ink-100 shadow-sm p-7">
      <button onClick={onBack} className="text-[12px] text-ink-500 hover:text-ink-800 flex items-center gap-1 mb-2"><Icon name="chevronLeft" size={12}/>กลับ</button>
      <h2 className="text-[20px] font-bold text-ink-900">สร้างบัญชีใหม่</h2>
      <p className="text-[12.5px] text-ink-500 mt-1">เพียงไม่กี่ขั้นตอน คุณก็ใช้งานระบบได้ทันที</p>
      {!submitted ? (
        <form onSubmit={submit} className="mt-4 grid grid-cols-2 gap-3">
          <Field label="ชื่อ-นามสกุล" required className="col-span-2">
            <Input value={form.full_name} onChange={e=>set("full_name", e.target.value)} placeholder="เช่น สมหญิง ใจดี" required/>
          </Field>
          <Field label="อีเมล" required
            error={emailStatus.available === false ? "อีเมลนี้มีบัญชีในระบบแล้ว · กรุณาใช้อีเมลอื่น หรือไปที่หน้า Login แล้วกดลืมรหัสผ่าน" : null}
            className="col-span-2">
            <Input type="email" value={form.email} onChange={e=>set("email", e.target.value)} placeholder="you@company.co.th" required/>
            {emailStatus.checking && (
              <div className="mt-1.5 text-[11px] text-ink-500 flex items-center gap-1">กำลังตรวจสอบ...</div>
            )}
            {!emailStatus.checking && emailStatus.available === true && (
              <div className="mt-1.5 text-[11px] text-emerald-600 flex items-center gap-1"><Icon name="checkCircle" size={11}/>อีเมลนี้ยังไม่มีผู้ใช้ — ใช้ได้</div>
            )}
          </Field>
          <Field label="โทรศัพท์" className="col-span-2"><Input value={form.phone} onChange={e=>set("phone", e.target.value)} placeholder="08x-xxx-xxxx"/></Field>
          <Field label="รหัสผ่าน" required><Input type="password" value={form.password} onChange={e=>set("password", e.target.value)} placeholder="อย่างน้อย 6 ตัวอักษร" required/></Field>
          <Field label="ยืนยันรหัสผ่าน" required><Input type="password" value={form.password2} onChange={e=>set("password2", e.target.value)} placeholder="••••••••" required/></Field>
          {err && (
            <div className="col-span-2 px-3 py-2 rounded-lg bg-rose-50 border border-rose-200 text-rose-700 text-[12px] flex items-start gap-2">
              <Icon name="alert" size={13} className="mt-0.5"/>{err}
            </div>
          )}
          <Button size="lg" className="col-span-2 mt-2" type="submit" disabled={busy || emailStatus.available === false}>
            {busy ? "กำลังสร้างบัญชี..." : "สร้างบัญชี"}
          </Button>
        </form>
      ) : (
        <div className="mt-5 px-4 py-5 rounded-xl bg-emerald-50 border border-emerald-100 text-emerald-800 text-center">
          <Icon name="checkCircle" size={26} className="mx-auto mb-2 text-emerald-600"/>
          <div className="font-semibold">สร้างบัญชีเรียบร้อยแล้ว</div>
          <div className="text-[12.5px] mt-1">เข้าสู่ระบบด้วยอีเมล {form.email} ได้ทันที</div>
          <Button variant="secondary" className="mt-3" onClick={onBack}>กลับไปหน้าเข้าสู่ระบบ</Button>
        </div>
      )}
    </div>
  );
};


const ChangePasswordForm = ({ initialEmail = "", onBack }) => {
  const [busy, setBusy] = useState(false);
  const [err, setErr] = useState("");
  const [done, setDone] = useState(false);
  const [form, setForm] = useState({
    email: initialEmail,
    current_password: "",
    new_password: "",
    new_password2: "",
  });
  const set = (k, v) => setForm(p => ({ ...p, [k]: v }));

  const submit = async (e) => {
    e.preventDefault();
    setErr("");
    if (!form.email.trim()) { setErr("กรุณากรอกอีเมล"); return; }
    if (!form.current_password) { setErr("กรุณากรอกรหัสผ่านเดิม"); return; }
    if (form.new_password.length < 6) { setErr("รหัสผ่านใหม่ต้องมีอย่างน้อย 6 ตัวอักษร"); return; }
    if (form.new_password !== form.new_password2) { setErr("รหัสผ่านใหม่ทั้งสองช่องไม่ตรงกัน"); return; }
    if (form.new_password === form.current_password) { setErr("รหัสผ่านใหม่ต้องไม่ซ้ำกับรหัสผ่านเดิม"); return; }

    setBusy(true);
    try {
      if (typeof window !== "undefined" && window.apiClient) {
        await window.apiClient.changePasswordWithCredentials(
          form.email.trim(),
          form.current_password,
          form.new_password
        );
      }
      setDone(true);
    } catch (apiErr) {
      if (apiErr.status === 401) setErr("อีเมลหรือรหัสผ่านเดิมไม่ถูกต้อง");
      else if (apiErr.status === 423) setErr("บัญชีถูกล็อกชั่วคราว เนื่องจากใส่รหัสผ่านผิดหลายครั้ง");
      else setErr(apiErr.message || "ไม่สามารถเปลี่ยนรหัสผ่านได้ กรุณาลองอีกครั้ง");
    } finally {
      setBusy(false);
    }
  };

  return (
    <div className="bg-white rounded-2xl border border-ink-100 shadow-sm p-7">
      <button onClick={onBack} className="text-[12px] text-ink-500 hover:text-ink-800 flex items-center gap-1 mb-2"><Icon name="chevronLeft" size={12}/>กลับ</button>
      <h2 className="text-[20px] font-bold text-ink-900">เปลี่ยนรหัสผ่าน</h2>
      <p className="text-[12.5px] text-ink-500 mt-1">ต้องยืนยันรหัสผ่านเดิมก่อนตั้งรหัสใหม่</p>
      {!done ? (
        <form onSubmit={submit} className="mt-4 space-y-3">
          <Field label="อีเมล" required>
            <Input type="email" value={form.email} onChange={e=>set("email", e.target.value)} placeholder="you@company.co.th" required autoFocus={!initialEmail}/>
          </Field>
          <Field label="รหัสผ่านเดิม" required>
            <Input type="password" value={form.current_password} onChange={e=>set("current_password", e.target.value)} placeholder="••••••••" required autoFocus={!!initialEmail}/>
          </Field>
          <Field label="รหัสผ่านใหม่" required hint="อย่างน้อย 6 ตัวอักษร">
            <Input type="password" value={form.new_password} onChange={e=>set("new_password", e.target.value)} placeholder="••••••••" required/>
          </Field>
          <Field label="ยืนยันรหัสผ่านใหม่" required>
            <Input type="password" value={form.new_password2} onChange={e=>set("new_password2", e.target.value)} placeholder="••••••••" required/>
          </Field>
          {err && (
            <div className="px-3 py-2 rounded-lg bg-rose-50 border border-rose-200 text-rose-700 text-[12px] flex items-start gap-2">
              <Icon name="alert" size={13} className="mt-0.5"/>{err}
            </div>
          )}
          <Button size="lg" className="w-full mt-1" type="submit" disabled={busy}>
            {busy ? "กำลังเปลี่ยนรหัสผ่าน..." : "เปลี่ยนรหัสผ่าน"}
          </Button>
        </form>
      ) : (
        <div className="mt-4 px-4 py-5 rounded-xl bg-emerald-50 border border-emerald-100 text-emerald-800 text-center">
          <Icon name="checkCircle" size={26} className="mx-auto mb-2 text-emerald-600"/>
          <div className="font-semibold">เปลี่ยนรหัสผ่านเรียบร้อย</div>
          <div className="text-[12.5px] mt-1">ใช้รหัสผ่านใหม่เข้าสู่ระบบได้ทันที</div>
          <Button variant="secondary" className="mt-3" onClick={onBack}>กลับไปหน้าเข้าสู่ระบบ</Button>
        </div>
      )}
    </div>
  );
};

window.LoginScreen = LoginScreen;
