// Super Admin Portal — dark navy themed shell with tenant management, create company, detail, audit logs

const SUPER_NAV = [
  { id:"tenants", label:"Tenant Management", icon:"building" },
  { id:"create",  label:"Create New Company", icon:"plus" },
  { id:"admins",  label:"Company Admin Users", icon:"users" },
  { id:"status",  label:"Service Status", icon:"power" },
  { id:"usage",   label:"Usage Monitoring", icon:"trending" },
  { id:"audit",   label:"Audit Logs", icon:"history" },
  { id:"settings",label:"System Settings", icon:"settings" },
];

const SuperAdminPortal = ({ tenants, setTenants, auditLog, setAuditLog, onLogout, tenantOpen, setTenantOpen, tenantAdmins, setTenantAdmins }) => {
  const [page, setPage] = useState("tenants");
  const [collapsed, setCollapsed] = useState(false);
  const toast = useToast();

  // tenant detail open
  const [detailTenant, setDetailTenant] = useState(null);
  // edit company info
  const [editCompanyFor, setEditCompanyFor] = useState(null);
  // edit admin user / password
  const [editAdminFor, setEditAdminFor] = useState(null);
  const [resetPwdFor, setResetPwdFor] = useState(null);

  const updateTenantStatus = (id, status, reason) => {
    setTenants(prev => prev.map(t => t.id===id ? { ...t, service_status: status, ...(status==="suspended"?{suspend_reason:reason}:{}) } : t));
    const tenant = tenants.find(t=>t.id===id);
    setAuditLog(prev => [{
      id: "a"+Math.random().toString(36).slice(2,7),
      scope:"super",
      tenant_id:id,
      action: status==="active"?"activate":status==="suspended"?"suspend":"deactivate",
      reason: reason || "—",
      performed_by:"SaaS Admin",
      at: new Date().toISOString().slice(0,16).replace("T"," "),
    }, ...prev]);
    toast({ kind:"success", msg:`อัปเดตสถานะ ${tenant?.tenant_code} เป็น ${status} สำเร็จ` });
  };

  const createTenant = (payload) => {
    const newId = "t_"+payload.tenant_code.toLowerCase();
    setTenants(prev => [{
      id:newId,
      ...payload,
      service_status: payload.service_status || "active",
      usage:{ users:1, active_users:1, divisions:0, departments:0, positions:0, processes:0, tasks:0, storage_gb:0 },
      created_at: new Date().toISOString().slice(0,10),
      last_login_at:"—",
      accent:"indigo",
    }, ...prev]);
    setAuditLog(prev => [{
      id:"a"+Math.random().toString(36).slice(2,7), scope:"super", tenant_id:newId, action:"create",
      reason:`สร้างบริษัทลูกค้าใหม่ ${payload.company_name}`, performed_by:"SaaS Admin", at: new Date().toISOString().slice(0,16).replace("T"," "),
    }, ...prev]);
    toast({ kind:"success", msg:"สร้างบริษัทลูกค้าและ Admin User สำเร็จแล้ว" });
    setPage("tenants");
  };

  return (
    <div className="min-h-screen sa-bg text-ink-100 flex">
      {/* Sidebar */}
      <aside className={`relative shrink-0 ${collapsed?"w-[68px]":"w-[238px]"} transition-all border-r border-white/10 bg-ink-950/40 backdrop-blur flex flex-col`}>
        <div className="px-3 py-4 flex items-center gap-2.5">
          <div className="w-9 h-9 rounded-xl bg-gradient-to-br from-indigo-500 to-indigo-700 text-white flex items-center justify-center shadow-lg shadow-indigo-900/50">
            <Icon name="shield" size={17}/>
          </div>
          {!collapsed && (
            <div className="min-w-0">
              <div className="text-[13.5px] font-bold tracking-tight">Super Admin</div>
              <div className="text-[10px] tracking-[.2em] uppercase text-indigo-300/80">SaaS Portal</div>
            </div>
          )}
        </div>
        <div className="px-2 mt-2 flex-1">
          {SUPER_NAV.map(n => (
            <SidebarItem key={n.id} icon={n.icon} label={n.label}
              active={page===n.id} onClick={()=>setPage(n.id)} collapsed={collapsed} dark
              badge={n.id==="tenants" ? tenants.length : null}/>
          ))}
        </div>
        <div className="p-2 border-t border-white/10">
          <button onClick={()=>setCollapsed(v=>!v)} className="w-full flex items-center justify-center gap-2 h-9 rounded-lg text-ink-400 hover:bg-white/5 hover:text-white text-[12px]">
            <Icon name={collapsed?"chevronRight":"chevronLeft"} size={14}/>
            {!collapsed && "Collapse"}
          </button>
        </div>
      </aside>

      {/* Main */}
      <div className="flex-1 flex flex-col min-w-0">
        {/* Top bar */}
        <header className="h-14 px-5 flex items-center gap-4 border-b border-white/10 bg-ink-950/30 backdrop-blur">
          <div className="flex items-center gap-2 text-[12.5px] text-indigo-200">
            <Icon name="shield" size={13}/><span>Super Admin Portal</span>
            <Icon name="chevronRight" size={12} className="text-ink-500"/>
            <span className="text-white">{SUPER_NAV.find(n=>n.id===page)?.label}</span>
          </div>
          <div className="ml-auto flex items-center gap-2">
            <div className="hidden md:flex items-center gap-2 px-2.5 h-8 bg-white/5 border border-white/10 rounded-lg text-[12px] text-indigo-200">
              <span className="w-1.5 h-1.5 rounded-full bg-emerald-400 animate-pulse"/>
              <span>System Healthy</span>
              <span className="text-ink-400">·</span>
              <span className="font-mono">{tenants.filter(t=>t.service_status==="active").length}/{tenants.length} Active</span>
            </div>
            <button onClick={onLogout} className="flex items-center gap-2 px-3 h-8 bg-white/5 hover:bg-white/10 rounded-lg text-[12px]">
              <Icon name="logout" size={13}/> ออกจากระบบ
            </button>
          </div>
        </header>

        {/* Content */}
        <main className="flex-1 overflow-y-auto thin-scroll p-6">
          {page === "tenants" && (
            <TenantsPage tenants={tenants} onView={setDetailTenant}
              onUpdateStatus={updateTenantStatus}
              onCreateNew={()=>setPage("create")}
              onEditCompany={setEditCompanyFor}
              onResetPwd={setResetPwdFor}
              tenantAdmins={tenantAdmins}/>
          )}
          {page === "create" && <CreateTenantPage onCreate={createTenant} onCancel={()=>setPage("tenants")}/>}
          {page === "admins" && <CompanyAdminsPage tenants={tenants} tenantAdmins={tenantAdmins} onEdit={setEditAdminFor} onResetPwd={setResetPwdFor}/>}
          {page === "status" && <ServiceStatusPage tenants={tenants} onUpdateStatus={updateTenantStatus} onView={setDetailTenant}/>}
          {page === "usage" && <UsageMonitoringPage tenants={tenants}/>}
          {page === "audit" && <SuperAuditPage auditLog={auditLog} tenants={tenants}/>}
          {page === "settings" && <SystemSettingsPage/>}
        </main>
      </div>

      <TenantDetailModal tenant={detailTenant} onClose={()=>setDetailTenant(null)}
        onUpdateStatus={updateTenantStatus}
        onSupportEnter={(t)=>{ setDetailTenant(null); setTenantOpen(t.id); }}
        onEditCompany={(t)=>{ setDetailTenant(null); setEditCompanyFor(t); }}
        onResetPwd={(t)=>{ setDetailTenant(null); setResetPwdFor(t); }}
        tenantAdmins={tenantAdmins}/>

      <EditCompanyModal tenant={editCompanyFor} onClose={()=>setEditCompanyFor(null)}
        onSave={(patch)=>{
          setTenants(prev => prev.map(t => t.id===editCompanyFor.id ? {...t, ...patch} : t));
          setAuditLog(prev => [{ id:"a"+Math.random().toString(36).slice(2,7), scope:"super", tenant_id:editCompanyFor.id, action:"update", reason:`แก้ไขข้อมูลบริษัท ${patch.company_name||editCompanyFor.company_name}`, performed_by:"SaaS Admin", at: new Date().toISOString().slice(0,16).replace("T"," ") }, ...prev]);
          toast({kind:"success", msg:"บันทึกข้อมูลบริษัทเรียบร้อย"});
          setEditCompanyFor(null);
        }}/>

      <EditAdminModal target={editAdminFor} onClose={()=>setEditAdminFor(null)}
        onSave={(patch)=>{
          setTenantAdmins(prev => ({ ...prev, [editAdminFor.tenant.id]: { ...prev[editAdminFor.tenant.id], ...patch } }));
          setAuditLog(prev => [{ id:"a"+Math.random().toString(36).slice(2,7), scope:"super", tenant_id:editAdminFor.tenant.id, action:"update", reason:`แก้ไข Admin User ${patch.full_name || editAdminFor.admin.full_name}`, performed_by:"SaaS Admin", at: new Date().toISOString().slice(0,16).replace("T"," ") }, ...prev]);
          toast({kind:"success", msg:"บันทึกข้อมูล Admin เรียบร้อย"});
          setEditAdminFor(null);
        }}/>

      <ResetPasswordModal target={resetPwdFor} onClose={()=>setResetPwdFor(null)} tenantAdmins={tenantAdmins}
        onConfirm={(mode, payload)=>{
          const t = resetPwdFor;
          const admin = tenantAdmins[t.id];
          if (mode === "manual") {
            // Just record the action; we don't store passwords here
            setAuditLog(prev => [{ id:"a"+Math.random().toString(36).slice(2,7), scope:"super", tenant_id:t.id, action:"reset_admin_password", reason:`ตั้งรหัสผ่านชั่วคราวใหม่ให้ ${admin.full_name}`, performed_by:"SaaS Admin", at: new Date().toISOString().slice(0,16).replace("T"," ") }, ...prev]);
            toast({kind:"success", msg:`ตั้งรหัสผ่านชั่วคราวให้ ${admin.email} แล้ว · ผู้ใช้จะถูกบังคับเปลี่ยนในการ login ครั้งถัดไป`});
          } else {
            setAuditLog(prev => [{ id:"a"+Math.random().toString(36).slice(2,7), scope:"super", tenant_id:t.id, action:"reset_admin_password", reason:`ส่งลิงก์ reset password ผ่านอีเมลให้ ${admin.full_name}`, performed_by:"SaaS Admin", at: new Date().toISOString().slice(0,16).replace("T"," ") }, ...prev]);
            toast({kind:"success", msg:`ส่งลิงก์รีเซ็ตรหัสผ่านไปยัง ${admin.email} แล้ว`});
          }
          setResetPwdFor(null);
        }}/>
    </div>
  );
};

// --------- TenantsPage ---------
const TenantsPage = ({ tenants, onView, onUpdateStatus, onCreateNew, onEditCompany, onResetPwd, tenantAdmins }) => {
  const [q, setQ] = useState("");
  const [status, setStatus] = useState("all");
  const [actionFor, setActionFor] = useState(null); // {tenant, type}
  const toast = useToast();

  const filtered = tenants.filter(t => {
    if (status !== "all" && t.service_status !== status) return false;
    if (q && !(t.company_name+t.tenant_code+t.contact_email).toLowerCase().includes(q.toLowerCase())) return false;
    return true;
  });

  return (
    <div className="text-ink-100">
      <div className="flex items-end justify-between flex-wrap gap-3 mb-5">
        <div>
          <div className="text-[11px] uppercase tracking-[.2em] text-indigo-300 font-semibold">SaaS Tenants</div>
          <h1 className="text-[26px] font-bold tracking-tight mt-1">บริหารบริษัทลูกค้าทั้งหมด</h1>
          <div className="text-[13px] text-indigo-200/70 mt-1">รายชื่อทุกบริษัทที่ใช้บริการระบบ พร้อมสถานะการให้บริการแบบ Real-time</div>
        </div>
        <div className="flex items-center gap-2">
          <SuperButton icon="refresh" variant="ghost" onClick={()=>toast({kind:"success", msg:"รีเฟรชข้อมูล Tenant เรียบร้อย"})}>รีเฟรช</SuperButton>
          <SuperButton icon="download" variant="ghost" onClick={()=>{
            downloadCsv(`saas_tenants_export.csv`,
              ["Tenant Code","Company","Industry","Plan","Status","Users","Processes","Tasks","Storage GB","Last Login","Created"],
              tenants.map(t => [t.tenant_code, t.company_name, t.industry, t.plan, t.service_status, t.usage.users, t.usage.processes, t.usage.tasks, t.usage.storage_gb, t.last_login_at, t.created_at]));
            toast({kind:"success", msg:"ส่งออก Tenant list เรียบร้อย"});
          }}>Export</SuperButton>
          <SuperButton icon="plus" variant="primary" onClick={onCreateNew}>สร้างบริษัทใหม่</SuperButton>
        </div>
      </div>

      {/* KPIs */}
      <div className="grid grid-cols-4 gap-3 mb-5">
        {[
          { label:"Tenants ทั้งหมด", value:tenants.length, sub:"Active + Suspended + Inactive", icon:"building", color:"from-indigo-500 to-indigo-700" },
          { label:"Active Tenants", value:tenants.filter(t=>t.service_status==="active").length, sub:"ใช้งานปกติ", icon:"checkCircle", color:"from-emerald-500 to-emerald-700" },
          { label:"Suspended", value:tenants.filter(t=>t.service_status==="suspended").length, sub:"ระงับการใช้งาน", icon:"pause", color:"from-amber-500 to-amber-700" },
          { label:"Inactive", value:tenants.filter(t=>t.service_status==="inactive").length, sub:"สิ้นสุดการให้บริการ", icon:"ban", color:"from-rose-500 to-rose-700" },
        ].map((k,i) => (
          <div key={i} className="rounded-2xl bg-white/5 border border-white/10 p-4 backdrop-blur">
            <div className="flex items-center gap-3">
              <div className={`w-10 h-10 rounded-xl bg-gradient-to-br ${k.color} flex items-center justify-center`}><Icon name={k.icon} size={16}/></div>
              <div>
                <div className="text-[11px] uppercase tracking-wider text-indigo-200/70">{k.label}</div>
                <div className="text-[26px] font-bold font-mono text-white">{k.value}</div>
                <div className="text-[10.5px] text-indigo-200/60">{k.sub}</div>
              </div>
            </div>
          </div>
        ))}
      </div>

      {/* filters */}
      <div className="flex items-center gap-2 mb-3 flex-wrap">
        <div className="relative flex-1 min-w-[240px] max-w-md">
          <Icon name="search" size={14} className="absolute left-3 top-1/2 -translate-y-1/2 text-indigo-300/70"/>
          <input value={q} onChange={e=>setQ(e.target.value)} placeholder="ค้นหาบริษัท / Tenant code / อีเมล…"
            className="w-full h-9 pl-9 pr-3 text-[13px] bg-white/5 border border-white/10 rounded-lg text-white placeholder:text-indigo-300/40 ring-focus"/>
        </div>
        <DarkSegmented value={status} onChange={setStatus} options={[
          { value:"all", label:"All" },
          { value:"active", label:"Active" },
          { value:"suspended", label:"Suspended" },
          { value:"inactive", label:"Inactive" },
        ]}/>
      </div>

      {/* Table */}
      <div className="rounded-2xl border border-white/10 bg-white/5 overflow-hidden">
        <div className="overflow-x-auto thin-scroll">
          <table className="w-full text-[12.5px]">
            <thead>
              <tr className="bg-white/5 text-indigo-200/75 text-[11px] uppercase tracking-wider">
                {["บริษัท","Tenant code","Database / Schema","Admin","สถานะ","Users","Processes","Tasks","Last login","Created","Actions"].map(h=>(
                  <th key={h} className="text-left font-semibold px-3 py-2.5 whitespace-nowrap border-b border-white/10">{h}</th>
                ))}
              </tr>
            </thead>
            <tbody>
              {filtered.map(t => {
                const admin = tenantAdmins?.[t.id] || TENANT_ADMIN_USERS[t.id];
                return (
                  <tr key={t.id} className="hover:bg-white/5 border-b border-white/5 last:border-0">
                    <td className="px-3 py-3">
                      <div className="flex items-center gap-2.5">
                        <div className={`w-9 h-9 rounded-lg bg-gradient-to-br from-indigo-400 to-indigo-700 flex items-center justify-center text-[11px] font-bold tracking-wide`}>
                          {t.tenant_code}
                        </div>
                        <div className="min-w-0">
                          <div className="font-semibold text-white truncate">{t.company_name}</div>
                          <div className="text-[11px] text-indigo-200/65 truncate">{t.industry} · {t.plan}</div>
                        </div>
                      </div>
                    </td>
                    <td className="px-3 py-3 font-mono text-indigo-300">{t.tenant_code}</td>
                    <td className="px-3 py-3 text-indigo-100/85">
                      <div className="flex items-center gap-1.5"><Icon name="database" size={12} className="text-indigo-300"/><span className="font-mono text-[11.5px]">{t.database_name}</span></div>
                      <div className="text-[10.5px] text-indigo-200/55 font-mono ml-4">schema: {t.schema_name}</div>
                    </td>
                    <td className="px-3 py-3">
                      <div className="text-white">{admin?.full_name}</div>
                      <div className="text-[11px] text-indigo-200/65 font-mono">{admin?.email}</div>
                    </td>
                    <td className="px-3 py-3"><TenantStatusPill status={t.service_status}/></td>
                    <td className="px-3 py-3 font-mono text-white">{t.usage.users}</td>
                    <td className="px-3 py-3 font-mono text-white">{t.usage.processes}</td>
                    <td className="px-3 py-3 font-mono text-white">{t.usage.tasks}</td>
                    <td className="px-3 py-3 text-indigo-100/75 font-mono text-[11.5px]">{t.last_login_at}</td>
                    <td className="px-3 py-3 text-indigo-100/75 font-mono text-[11.5px]">{t.created_at}</td>
                    <td className="px-3 py-3">
                      <div className="flex items-center gap-1">
                        <SuperIconBtn icon="eye" tip="ดูรายละเอียด" onClick={()=>onView(t)}/>
                        {t.service_status === "active"
                          ? <SuperIconBtn icon="pause" tip="ระงับการใช้งาน" tone="warn" onClick={()=>setActionFor({tenant:t, type:"suspend"})}/>
                          : <SuperIconBtn icon="play" tip="เปิดใช้งาน" tone="success" onClick={()=>setActionFor({tenant:t, type:"activate"})}/>
                        }
                        <SuperIconBtn icon="key" tip="รีเซ็ตรหัสผ่าน Admin" onClick={()=>onResetPwd(t)}/>
                        <SuperIconBtn icon="edit" tip="แก้ไขข้อมูลบริษัท" onClick={()=>onEditCompany(t)}/>
                        <SuperIconBtn icon="ban" tip="ปิดการใช้งานถาวร" tone="danger" onClick={()=>setActionFor({tenant:t, type:"deactivate"})}/>
                      </div>
                    </td>
                  </tr>
                );
              })}
            </tbody>
          </table>
        </div>
      </div>

      <ReasonModal
        open={actionFor?.type === "suspend"}
        onClose={()=>setActionFor(null)}
        onConfirm={(reason) => onUpdateStatus(actionFor.tenant.id, "suspended", reason)}
        title={`ระงับการใช้งาน — ${actionFor?.tenant?.company_name}`}
        subtitle="ผู้ใช้ทั้งหมดของบริษัทนี้จะไม่สามารถเข้าระบบได้ ข้อมูลยังถูกเก็บไว้"
        confirmLabel="ระงับการใช้งาน"
        tone="warn"
      />
      <ReasonModal
        open={actionFor?.type === "deactivate"}
        onClose={()=>setActionFor(null)}
        onConfirm={(reason) => onUpdateStatus(actionFor.tenant.id, "inactive", reason)}
        title={`ปิดการใช้งานถาวร — ${actionFor?.tenant?.company_name}`}
        subtitle="บริษัทนี้จะถือว่าสิ้นสุดสัญญาบริการ"
        confirmLabel="ปิดการใช้งาน"
        tone="danger"
      />
      <Modal open={actionFor?.type === "activate"} onClose={()=>setActionFor(null)}
        title="ยืนยันการเปิดใช้งานบริการ"
        subtitle={actionFor?.tenant ? `บริษัท ${actionFor.tenant.company_name} จะสามารถเข้าใช้งานได้ทันที` : ""}
        footer={<>
          <Button variant="secondary" onClick={()=>setActionFor(null)}>ยกเลิก</Button>
          <Button variant="success" onClick={()=>{ onUpdateStatus(actionFor.tenant.id, "active", "เปิดใช้งานโดย Super Admin"); setActionFor(null); }}>เปิดใช้งาน</Button>
        </>}>
        <div className="text-[13px] text-ink-700">ระบบจะเริ่มอนุญาตให้ทุกผู้ใช้ของบริษัทนี้เข้าสู่ระบบได้ทันที</div>
      </Modal>
    </div>
  );
};

// dark variant buttons / pills
const DarkSegmented = ({ value, onChange, options }) => (
  <div className="inline-flex items-center bg-white/5 border border-white/10 rounded-lg p-0.5">
    {options.map(o => (
      <button key={o.value} onClick={() => onChange(o.value)}
        className={`px-3 h-7 rounded-md text-[12px] font-medium transition ${value===o.value?"bg-white text-ink-900":"text-indigo-200/80 hover:text-white"}`}>
        {o.label}
      </button>
    ))}
  </div>
);

const SuperButton = ({ icon, children, variant="primary", onClick }) => {
  const styles = {
    primary: "bg-indigo-500 hover:bg-indigo-400 text-white",
    ghost:   "bg-white/5 hover:bg-white/10 text-indigo-100 border border-white/10",
  };
  return (
    <button onClick={onClick} className={`inline-flex items-center gap-1.5 h-9 px-3 rounded-lg text-[12.5px] font-medium transition ${styles[variant]}`}>
      {icon && <Icon name={icon} size={14}/>}{children}
    </button>
  );
};

const SuperIconBtn = ({ icon, tip, tone="default", onClick }) => {
  const tones = {
    default:"text-indigo-200 hover:bg-white/10 hover:text-white",
    warn:"text-amber-300 hover:bg-amber-400/10 hover:text-amber-200",
    danger:"text-rose-300 hover:bg-rose-400/10 hover:text-rose-200",
    success:"text-emerald-300 hover:bg-emerald-400/10 hover:text-emerald-200",
  };
  return (
    <Tip tip={tip}><button onClick={onClick} className={`w-7 h-7 rounded-md flex items-center justify-center ${tones[tone]} transition`}><Icon name={icon} size={13}/></button></Tip>
  );
};

const TenantStatusPill = ({ status }) => {
  const m = {
    active:    { label:"Active",    dot:"bg-emerald-400", text:"text-emerald-300", border:"border-emerald-400/30", bg:"bg-emerald-400/10" },
    suspended: { label:"Suspended", dot:"bg-amber-400",   text:"text-amber-300",   border:"border-amber-400/30",   bg:"bg-amber-400/10" },
    inactive:  { label:"Inactive",  dot:"bg-rose-400",    text:"text-rose-300",    border:"border-rose-400/30",    bg:"bg-rose-400/10" },
  }[status];
  return (
    <span className={`inline-flex items-center gap-1.5 px-2 py-0.5 rounded-md border ${m.bg} ${m.text} ${m.border} text-[11.5px] font-medium`}>
      <span className={`w-1.5 h-1.5 rounded-full ${m.dot}`}/>{m.label}
    </span>
  );
};

// --------- Tenant detail modal ---------
const TenantDetailModal = ({ tenant, onClose, onUpdateStatus, onSupportEnter, onEditCompany, onResetPwd, tenantAdmins }) => {
  const [actionFor, setActionFor] = useState(null);
  if (!tenant) return null;
  const admin = tenantAdmins?.[tenant.id] || TENANT_ADMIN_USERS[tenant.id];
  const u = tenant.usage;
  return (
    <>
    <Modal open={!!tenant} onClose={onClose} width={780} tone="dark"
      title={<span className="flex items-center gap-2">
        <span className="w-8 h-8 rounded-md bg-indigo-500/80 flex items-center justify-center text-white text-[11px] font-bold">{tenant.tenant_code}</span>
        <span>{tenant.company_name}</span>
      </span>}
      subtitle={<span className="font-mono">{tenant.industry} · {tenant.plan} · created {tenant.created_at}</span>}
      footer={<>
        <SuperButton variant="ghost" icon="key" onClick={()=>onResetPwd(tenant)}>รีเซ็ตรหัสผ่าน Admin</SuperButton>
        <SuperButton variant="ghost" icon="edit" onClick={()=>onEditCompany(tenant)}>แก้ไขข้อมูลบริษัท</SuperButton>
        <SuperButton variant="ghost" icon="link" onClick={()=>onSupportEnter(tenant)}>เข้า Support Mode</SuperButton>
        {tenant.service_status==="active"
          ? <button onClick={()=>setActionFor("suspend")} className="inline-flex items-center gap-1.5 h-9 px-3 rounded-lg text-[12.5px] font-medium bg-amber-500/90 hover:bg-amber-500 text-white"><Icon name="pause" size={13}/>ระงับการใช้งาน</button>
          : <button onClick={()=>setActionFor("activate")} className="inline-flex items-center gap-1.5 h-9 px-3 rounded-lg text-[12.5px] font-medium bg-emerald-500 hover:bg-emerald-400 text-white"><Icon name="play" size={13}/>เปิดใช้งาน</button>
        }
      </>}
    >
      <div className="grid grid-cols-2 gap-4 text-[12.5px]">
        <div className="rounded-xl border border-white/10 bg-white/5 p-4">
          <div className="text-[11px] uppercase tracking-wider text-indigo-300 mb-2">Service Status</div>
          <TenantStatusPill status={tenant.service_status}/>
          <div className="mt-3 grid grid-cols-2 gap-2 text-[12px] text-indigo-100/80">
            <Kv k="เริ่มบริการ" v={tenant.service_start_date}/>
            <Kv k="สิ้นสุดบริการ" v={tenant.service_expiry_date}/>
            <Kv k="Plan" v={tenant.plan}/>
            <Kv k="Seats" v={`${u.users}/${tenant.seats}`}/>
          </div>
          {tenant.suspend_reason && <div className="mt-3 px-2.5 py-2 rounded-md bg-amber-400/10 border border-amber-400/30 text-amber-200 text-[11.5px]">เหตุผลการระงับ: {tenant.suspend_reason}</div>}
        </div>

        <div className="rounded-xl border border-white/10 bg-white/5 p-4">
          <div className="text-[11px] uppercase tracking-wider text-indigo-300 mb-2">Database / Schema</div>
          <div className="grid grid-cols-2 gap-2 text-[12px] text-indigo-100/80">
            <Kv k="Database Type" v={<span className="font-mono">{tenant.database_type}</span>}/>
            <Kv k="Storage Used" v={`${u.storage_gb} GB`}/>
            <Kv k="Database" v={<span className="font-mono">{tenant.database_name}</span>}/>
            <Kv k="Schema" v={<span className="font-mono">{tenant.schema_name}</span>}/>
          </div>
          <div className="mt-3 px-2.5 py-2 rounded-md bg-indigo-400/10 border border-indigo-400/30 text-indigo-200 text-[11.5px] flex items-start gap-2">
            <Icon name="shield" size={13} className="mt-0.5"/><span>Tenant isolation active — ข้อมูลของบริษัทนี้ถูกแยกระดับ {tenant.database_type==="separate_database"?"Database":"Schema"} จากบริษัทอื่นทั้งหมด</span>
          </div>
        </div>

        <div className="rounded-xl border border-white/10 bg-white/5 p-4 col-span-2">
          <div className="text-[11px] uppercase tracking-wider text-indigo-300 mb-3">Tenant Usage Summary</div>
          <div className="grid grid-cols-4 gap-3">
            {[
              { label:"Users (active)", v:`${u.active_users}/${u.users}` },
              { label:"Divisions", v:u.divisions },
              { label:"Departments", v:u.departments },
              { label:"Positions", v:u.positions },
              { label:"Processes", v:u.processes },
              { label:"Task Instances", v:u.tasks },
              { label:"Storage", v:`${u.storage_gb} GB` },
              { label:"Last Login", v:tenant.last_login_at, mono:true },
            ].map((k,i) => (
              <div key={i} className="rounded-lg border border-white/10 bg-ink-950/40 px-3 py-2.5">
                <div className="text-[10.5px] text-indigo-200/70 uppercase tracking-wider">{k.label}</div>
                <div className={`mt-1 text-white font-bold ${k.mono?"font-mono text-[14px]":"text-[18px]"}`}>{k.v}</div>
              </div>
            ))}
          </div>
        </div>

        <div className="rounded-xl border border-white/10 bg-white/5 p-4 col-span-2">
          <div className="text-[11px] uppercase tracking-wider text-indigo-300 mb-2">Company Admin User</div>
          <div className="flex items-center gap-3">
            <Avatar name={admin?.full_name} size={36}/>
            <div className="flex-1">
              <div className="text-white font-semibold">{admin?.full_name}</div>
              <div className="text-[11.5px] text-indigo-100/75 font-mono">{admin?.email} · {admin?.employee_code}</div>
            </div>
            <div className="text-right">
              <div className="text-[10.5px] text-indigo-200/65 uppercase tracking-wider">Last Login</div>
              <div className="font-mono text-[12px] text-white">{admin?.last_login_at}</div>
            </div>
          </div>
        </div>
      </div>
    </Modal>

    <ReasonModal open={actionFor==="suspend"} onClose={()=>setActionFor(null)}
      onConfirm={(r)=>{ onUpdateStatus(tenant.id, "suspended", r); setActionFor(null); onClose(); }}
      title={`ระงับการใช้งาน — ${tenant.company_name}`} subtitle="กรุณาระบุเหตุผล จะถูกบันทึกใน Audit Log"
      confirmLabel="ระงับการใช้งาน" tone="warn"/>
    <Modal open={actionFor==="activate"} onClose={()=>setActionFor(null)} title="ยืนยันการเปิดใช้งาน"
      footer={<>
        <Button variant="secondary" onClick={()=>setActionFor(null)}>ยกเลิก</Button>
        <Button variant="success" onClick={()=>{ onUpdateStatus(tenant.id, "active", "เปิดใช้งานโดย Super Admin"); setActionFor(null); onClose(); }}>เปิดใช้งาน</Button>
      </>}>
      <div className="text-[13px] text-ink-700">บริษัทจะสามารถเข้าระบบได้อีกครั้งทันที</div>
    </Modal>
    </>
  );
};

const Kv = ({ k, v }) => (
  <div>
    <div className="text-[10.5px] text-indigo-200/60 uppercase tracking-wider">{k}</div>
    <div className="text-white font-medium mt-0.5">{v}</div>
  </div>
);

// --------- Create tenant form ---------
const CreateTenantPage = ({ onCreate, onCancel }) => {
  const [f, setF] = useState({
    company_name:"", tenant_code:"", contact_person:"", contact_email:"", contact_phone:"",
    service_start_date: new Date().toISOString().slice(0,10),
    service_expiry_date: "2027-05-22",
    service_status:"active",
    database_type:"separate_schema",
    database_name:"raci_saas_main", schema_name:"",
    plan:"Business",
    admin_name:"", admin_email:"", admin_code:"", admin_pwd:"", admin_pwd2:"",
    industry:"การผลิต", seats:50,
  });
  const set = (k,v) => setF(p => ({ ...p, [k]:v }));
  const [busy, setBusy] = useState(false);
  const [errs, setErrs] = useState({});

  useEffect(() => { if (f.tenant_code) set("schema_name", "tenant_"+f.tenant_code.toLowerCase()); }, [f.tenant_code]);

  const validate = () => {
    const e = {};
    if (!f.company_name) e.company_name="กรุณากรอกชื่อบริษัท";
    if (!f.tenant_code || f.tenant_code.length<2) e.tenant_code="รหัสบริษัทอย่างน้อย 2 ตัว";
    if (!f.contact_email) e.contact_email="กรุณากรอกอีเมลผู้ติดต่อ";
    if (!f.admin_name) e.admin_name="กรุณากรอกชื่อ Admin";
    if (!f.admin_email) e.admin_email="กรุณากรอกอีเมล Admin";
    if (!f.admin_pwd || f.admin_pwd.length<6) e.admin_pwd="รหัสผ่านอย่างน้อย 6 ตัว";
    if (f.admin_pwd !== f.admin_pwd2) e.admin_pwd2="รหัสผ่านไม่ตรงกัน";
    return e;
  };

  const [apiError, setApiError] = useState("");

  const submit = async () => {
    setApiError("");
    const e = validate();
    setErrs(e);
    if (Object.keys(e).length) {
      setApiError(`กรุณากรอกข้อมูลให้ครบ: ${Object.values(e).join(", ")}`);
      if (typeof window !== "undefined") window.scrollTo({ top: 0, behavior: "smooth" });
      return;
    }
    setBusy(true);
    try {
      if (typeof window !== "undefined" && window.apiClient) {
        await window.apiClient.createTenant(f);
      }
      onCreate(f);
    } catch (err) {
      setApiError(err.message || "ไม่สามารถสร้างบริษัทได้ กรุณาลองอีกครั้ง");
    } finally {
      setBusy(false);
    }
  };

  return (
    <div className="text-ink-100 max-w-[920px] mx-auto">
      <div className="mb-5">
        <div className="text-[11px] uppercase tracking-[.2em] text-indigo-300 font-semibold">Onboarding</div>
        <h1 className="text-[26px] font-bold tracking-tight mt-1">สร้างบริษัทลูกค้าใหม่</h1>
        <div className="text-[13px] text-indigo-200/70 mt-1">ระบบจะสร้าง Tenant แยก พร้อม Admin User ตัวแรกอัตโนมัติ</div>
      </div>

      {apiError && (
        <div className="mb-4 px-4 py-3 rounded-lg bg-rose-500/15 border border-rose-400/40 text-rose-100 text-[13px] flex items-start gap-2">
          <Icon name="info" size={14} className="mt-0.5 shrink-0"/>
          <div className="flex-1">{apiError}</div>
          <button onClick={()=>setApiError("")} className="text-rose-200/70 hover:text-white">✕</button>
        </div>
      )}

      <div className="grid grid-cols-3 gap-4">
        <div className="col-span-2 space-y-4">
          {/* Section 1 - Company */}
          <Section title="1. ข้อมูลบริษัท" subtitle="ข้อมูลพื้นฐานของบริษัทลูกค้า">
            <div className="grid grid-cols-2 gap-3">
              <DarkField label="ชื่อบริษัท" required error={errs.company_name}>
                <DarkInput value={f.company_name} onChange={e=>set("company_name", e.target.value)} placeholder="เช่น ABC Manufacturing Co., Ltd."/>
              </DarkField>
              <DarkField label="Tenant Code" required error={errs.tenant_code} hint="2–6 ตัวอักษร">
                <DarkInput className="font-mono uppercase tracking-wider" value={f.tenant_code} maxLength={6} onChange={e=>set("tenant_code", e.target.value.toUpperCase())} placeholder="ABC"/>
              </DarkField>
              <DarkField label="อุตสาหกรรม">
                <DarkSelect value={f.industry} onChange={e=>set("industry", e.target.value)}>
                  {["การผลิต","ค้าปลีก","บริการ","ขนส่ง","ที่ปรึกษา","ธนาคาร / การเงิน","อื่นๆ"].map(x=><option key={x}>{x}</option>)}
                </DarkSelect>
              </DarkField>
              <DarkField label="Plan">
                <DarkSelect value={f.plan} onChange={e=>set("plan", e.target.value)}>
                  {["Starter","Business","Enterprise"].map(x=><option key={x}>{x}</option>)}
                </DarkSelect>
              </DarkField>
              <DarkField label="ผู้ติดต่อ"><DarkInput value={f.contact_person} onChange={e=>set("contact_person", e.target.value)}/></DarkField>
              <DarkField label="เบอร์ติดต่อ"><DarkInput value={f.contact_phone} onChange={e=>set("contact_phone", e.target.value)} placeholder="+66 2 555 0000"/></DarkField>
              <DarkField label="อีเมลผู้ติดต่อ" required error={errs.contact_email} className="col-span-2">
                <DarkInput type="email" value={f.contact_email} onChange={e=>set("contact_email", e.target.value)}/>
              </DarkField>
            </div>
          </Section>

          {/* Section 2 - Service */}
          <Section title="2. การให้บริการ" subtitle="กำหนดช่วงเวลาให้บริการและสถานะเริ่มต้น">
            <div className="grid grid-cols-3 gap-3">
              <DarkField label="วันเริ่มบริการ"><DarkInput type="date" value={f.service_start_date} onChange={e=>set("service_start_date", e.target.value)}/></DarkField>
              <DarkField label="วันสิ้นสุดบริการ"><DarkInput type="date" value={f.service_expiry_date} onChange={e=>set("service_expiry_date", e.target.value)}/></DarkField>
              <DarkField label="จำนวนผู้ใช้ (Seats)"><DarkInput type="number" value={f.seats} onChange={e=>set("seats", +e.target.value)}/></DarkField>
              <DarkField label="สถานะเริ่มต้น" className="col-span-3">
                <div className="flex items-center gap-2">
                  {["active","suspended","inactive"].map(s => (
                    <button key={s} onClick={()=>set("service_status", s)}
                      className={`px-3 h-8 rounded-lg text-[12px] font-medium border transition ${f.service_status===s?"bg-indigo-500 border-indigo-400 text-white":"bg-white/5 border-white/10 text-indigo-200 hover:bg-white/10"}`}>
                      {s.charAt(0).toUpperCase()+s.slice(1)}
                    </button>
                  ))}
                </div>
              </DarkField>
            </div>
          </Section>

          {/* Section 3 - DB */}
          <Section title="3. โครงสร้างฐานข้อมูล" subtitle="เลือกรูปแบบการแยกข้อมูลของ Tenant">
            <div className="grid grid-cols-3 gap-2">
              {[
                { v:"separate_database", t:"Separate Database", d:"แยกฐานข้อมูลคนละ instance — ปลอดภัยสูงสุด" },
                { v:"separate_schema",   t:"Separate Schema",   d:"แยก Schema ใน DB เดียวกัน — สมดุล (แนะนำ)" },
                { v:"logical_partition", t:"Logical Partition", d:"ใช้ tenant_id เป็นตัวแบ่ง — ประหยัด" },
              ].map(o => (
                <button key={o.v} onClick={()=>set("database_type", o.v)}
                  className={`text-left p-3 rounded-xl border transition ${f.database_type===o.v?"bg-indigo-500/15 border-indigo-400/60 ring-2 ring-indigo-500/20":"bg-white/5 border-white/10 hover:bg-white/10"}`}>
                  <div className="flex items-center gap-2"><Icon name="database" size={14} className={f.database_type===o.v?"text-indigo-300":"text-indigo-200/70"}/><span className="text-[13px] font-semibold text-white">{o.t}</span></div>
                  <div className="text-[11px] text-indigo-200/70 mt-1.5">{o.d}</div>
                </button>
              ))}
            </div>
            <div className="grid grid-cols-2 gap-3 mt-3">
              <DarkField label="Database name"><DarkInput className="font-mono" value={f.database_name} onChange={e=>set("database_name", e.target.value)}/></DarkField>
              <DarkField label="Schema name"><DarkInput className="font-mono" value={f.schema_name} onChange={e=>set("schema_name", e.target.value)} placeholder="tenant_xxx"/></DarkField>
            </div>
          </Section>

          {/* Section 4 - Admin */}
          <Section title="4. Admin User ตัวแรก" subtitle="ระบบจะส่งข้อมูลเข้าสู่ระบบให้ Admin ของบริษัทลูกค้า">
            <div className="grid grid-cols-2 gap-3">
              <DarkField label="ชื่อ-นามสกุล Admin" required error={errs.admin_name}>
                <DarkInput value={f.admin_name} onChange={e=>set("admin_name", e.target.value)}/>
              </DarkField>
              <DarkField label="รหัสพนักงาน">
                <DarkInput className="font-mono" value={f.admin_code} onChange={e=>set("admin_code", e.target.value)} placeholder={`${f.tenant_code||"XXX"}-0001`}/>
              </DarkField>
              <DarkField label="อีเมล / Username" required error={errs.admin_email} className="col-span-2">
                <DarkInput type="email" value={f.admin_email} onChange={e=>set("admin_email", e.target.value)}/>
              </DarkField>
              <DarkField label="รหัสผ่านชั่วคราว" required error={errs.admin_pwd}>
                <DarkInput type="password" value={f.admin_pwd} onChange={e=>set("admin_pwd", e.target.value)}/>
              </DarkField>
              <DarkField label="ยืนยันรหัสผ่าน" required error={errs.admin_pwd2}>
                <DarkInput type="password" value={f.admin_pwd2} onChange={e=>set("admin_pwd2", e.target.value)}/>
              </DarkField>
            </div>
            <div className="mt-3 px-3 py-2.5 rounded-lg bg-indigo-400/10 border border-indigo-400/25 text-indigo-200 text-[11.5px] flex items-start gap-2">
              <Icon name="info" size={13} className="mt-0.5 shrink-0"/>
              <span>Admin ของบริษัทลูกค้าจะถูกบังคับเปลี่ยนรหัสผ่านเมื่อเข้าสู่ระบบครั้งแรก และจะมีสิทธิ์เต็มในการตั้งค่า Master Data, Organization Chart และ RACI Assignment ภายในบริษัทเท่านั้น</span>
            </div>
          </Section>
        </div>

        {/* Right preview */}
        <div className="space-y-4">
          <div className="rounded-2xl border border-white/10 bg-white/5 p-4 sticky top-4">
            <div className="text-[11px] uppercase tracking-wider text-indigo-300 mb-3">Preview</div>
            <div className="flex items-center gap-2.5">
              <div className="w-12 h-12 rounded-xl bg-gradient-to-br from-indigo-400 to-indigo-700 flex items-center justify-center text-white font-bold text-[14px]">
                {f.tenant_code || "—"}
              </div>
              <div className="min-w-0">
                <div className="text-white font-semibold truncate">{f.company_name || "ชื่อบริษัท"}</div>
                <div className="text-[11.5px] text-indigo-200/70 truncate">{f.industry} · {f.plan}</div>
              </div>
            </div>
            <div className="mt-4 grid gap-2 text-[12px] text-indigo-100/85">
              <PreviewRow k="Tenant Code" v={<span className="font-mono">{f.tenant_code || "—"}</span>}/>
              <PreviewRow k="DB Type" v={<span className="font-mono">{f.database_type}</span>}/>
              <PreviewRow k="Schema" v={<span className="font-mono">{f.schema_name || "—"}</span>}/>
              <PreviewRow k="Service" v={<TenantStatusPill status={f.service_status}/>}/>
              <PreviewRow k="Period" v={<span className="font-mono text-[11px]">{f.service_start_date} → {f.service_expiry_date}</span>}/>
              <PreviewRow k="Seats" v={f.seats}/>
              <PreviewRow k="Admin" v={f.admin_name || "—"}/>
            </div>
            <div className="mt-4 grid gap-2">
              <button onClick={submit} disabled={busy}
                className="w-full h-10 rounded-lg bg-indigo-500 hover:bg-indigo-400 text-white font-semibold flex items-center justify-center gap-2">
                {busy ? "กำลังสร้าง..." : <>สร้างบริษัทลูกค้า <Icon name="arrowRight" size={14}/></>}
              </button>
              <button onClick={onCancel} className="w-full h-9 rounded-lg bg-white/5 border border-white/10 text-indigo-200 hover:bg-white/10 text-[12.5px]">ยกเลิก</button>
            </div>
          </div>
        </div>
      </div>
    </div>
  );
};

const Section = ({ title, subtitle, children }) => (
  <div className="rounded-2xl border border-white/10 bg-white/5 p-5">
    <div className="text-[14px] font-semibold text-white">{title}</div>
    {subtitle && <div className="text-[12px] text-indigo-200/70 mt-0.5 mb-3">{subtitle}</div>}
    {children}
  </div>
);
const PreviewRow = ({ k, v }) => (
  <div className="flex items-center justify-between gap-2">
    <div className="text-indigo-200/60 text-[11px] uppercase tracking-wider">{k}</div>
    <div className="text-right">{v}</div>
  </div>
);
const DarkField = ({ label, required, hint, error, children, className="" }) => (
  <label className={`block ${className}`}>
    <div className="text-[11.5px] font-medium text-indigo-200/85 mb-1 flex items-center gap-1">
      {label}{required && <span className="text-rose-400">*</span>}
      {hint && <span className="text-indigo-200/50 font-normal">· {hint}</span>}
    </div>
    {children}
    {error && <div className="text-[11px] text-rose-300 mt-1">{error}</div>}
  </label>
);
const DarkInput = ({ className="", ...props }) => (
  <input {...props} className={`w-full h-9 px-3 text-[13px] bg-ink-950/40 border border-white/10 rounded-lg text-white placeholder:text-indigo-300/40 focus:border-indigo-400 ring-focus ${className}`}/>
);
const DarkSelect = ({ className="", children, ...props }) => (
  <div className="relative">
    <select {...props} className={`w-full h-9 pl-3 pr-8 text-[13px] bg-ink-950/40 border border-white/10 rounded-lg text-white appearance-none focus:border-indigo-400 ring-focus ${className}`}>{children}</select>
    <Icon name="chevronDown" size={13} className="absolute right-2.5 top-1/2 -translate-y-1/2 text-indigo-300/70 pointer-events-none"/>
  </div>
);

// ----- Company Admin Users page -----
const CompanyAdminsPage = ({ tenants, tenantAdmins, onEdit, onResetPwd }) => (
  <div className="text-ink-100">
    <div className="mb-5">
      <div className="text-[11px] uppercase tracking-[.2em] text-indigo-300 font-semibold">Initial Admins</div>
      <h1 className="text-[26px] font-bold tracking-tight mt-1">บัญชี Admin ของแต่ละบริษัท</h1>
    </div>
    <div className="rounded-2xl border border-white/10 bg-white/5">
      <table className="w-full text-[12.5px]">
        <thead>
          <tr className="bg-white/5 text-indigo-200/75 text-[11px] uppercase tracking-wider">
            {["บริษัท","Admin User","อีเมล","รหัสพนักงาน","Last Login","สถานะบริษัท","Action"].map(h=>(
              <th key={h} className="text-left font-semibold px-3 py-2.5 border-b border-white/10">{h}</th>
            ))}
          </tr>
        </thead>
        <tbody>
          {tenants.map(t => {
            const a = tenantAdmins?.[t.id] || TENANT_ADMIN_USERS[t.id];
            return (
              <tr key={t.id} className="hover:bg-white/5 border-b border-white/5 last:border-0">
                <td className="px-3 py-3 font-semibold text-white">{t.company_short} <span className="ml-1 font-mono text-indigo-300">[{t.tenant_code}]</span></td>
                <td className="px-3 py-3"><div className="flex items-center gap-2"><Avatar name={a?.full_name} size={26}/><span className="text-white">{a?.full_name}</span></div></td>
                <td className="px-3 py-3 font-mono text-indigo-100/85">{a?.email}</td>
                <td className="px-3 py-3 font-mono text-indigo-100/85">{a?.employee_code}</td>
                <td className="px-3 py-3 font-mono text-indigo-100/85">{a?.last_login_at}</td>
                <td className="px-3 py-3"><TenantStatusPill status={t.service_status}/></td>
                <td className="px-3 py-3">
                  <div className="flex items-center gap-1">
                    <SuperIconBtn icon="key" tip="รีเซ็ตรหัสผ่าน" onClick={()=>onResetPwd(t)}/>
                    <SuperIconBtn icon="edit" tip="แก้ไข" onClick={()=>onEdit({ tenant: t, admin: a })}/>
                  </div>
                </td>
              </tr>
            );
          })}
        </tbody>
      </table>
    </div>
  </div>
);

// ----- Service Status -----
const ServiceStatusPage = ({ tenants, onUpdateStatus, onView }) => (
  <div className="text-ink-100">
    <div className="mb-5">
      <div className="text-[11px] uppercase tracking-[.2em] text-indigo-300 font-semibold">Service Health</div>
      <h1 className="text-[26px] font-bold tracking-tight mt-1">สถานะบริการของแต่ละ Tenant</h1>
    </div>
    <div className="grid grid-cols-2 gap-3">
      {tenants.map(t => (
        <div key={t.id} className="rounded-2xl border border-white/10 bg-white/5 p-4">
          <div className="flex items-start justify-between">
            <div className="flex items-center gap-3">
              <div className="w-11 h-11 rounded-xl bg-gradient-to-br from-indigo-400 to-indigo-700 flex items-center justify-center text-white text-[12px] font-bold">{t.tenant_code}</div>
              <div>
                <div className="font-semibold text-white">{t.company_short}</div>
                <div className="text-[11px] text-indigo-200/70">Plan {t.plan} · {t.usage.users} users</div>
              </div>
            </div>
            <TenantStatusPill status={t.service_status}/>
          </div>
          <div className="mt-3 grid grid-cols-3 gap-2 text-[11.5px]">
            <Kv k="Expiry" v={<span className="font-mono">{t.service_expiry_date}</span>}/>
            <Kv k="Last Login" v={<span className="font-mono">{t.last_login_at}</span>}/>
            <Kv k="Storage" v={`${t.usage.storage_gb} GB`}/>
          </div>
          <div className="mt-3 flex gap-2">
            {t.service_status==="active"
              ? <button onClick={()=>onUpdateStatus(t.id, "suspended", "ระงับชั่วคราว")} className="flex-1 h-8 rounded-lg bg-amber-500/90 hover:bg-amber-500 text-white text-[12px] font-medium">ระงับการใช้งาน</button>
              : <button onClick={()=>onUpdateStatus(t.id, "active", "เปิดใช้งาน")} className="flex-1 h-8 rounded-lg bg-emerald-500 hover:bg-emerald-400 text-white text-[12px] font-medium">เปิดใช้งาน</button>}
            <button onClick={()=>onView(t)} className="flex-1 h-8 rounded-lg bg-white/5 border border-white/10 hover:bg-white/10 text-indigo-200 text-[12px]">ดูรายละเอียด</button>
          </div>
        </div>
      ))}
    </div>
  </div>
);

// ----- Usage monitoring -----
const UsageMonitoringPage = ({ tenants }) => {
  const totals = tenants.reduce((a,t)=>{
    a.users += t.usage.users; a.active += t.usage.active_users;
    a.processes += t.usage.processes; a.tasks += t.usage.tasks; a.storage += t.usage.storage_gb;
    return a;
  }, { users:0, active:0, processes:0, tasks:0, storage:0 });
  const maxStorage = Math.max(...tenants.map(t=>t.usage.storage_gb));
  return (
    <div className="text-ink-100">
      <div className="mb-5">
        <div className="text-[11px] uppercase tracking-[.2em] text-indigo-300 font-semibold">Usage</div>
        <h1 className="text-[26px] font-bold tracking-tight mt-1">การใช้งานในระดับ SaaS</h1>
      </div>
      <div className="grid grid-cols-5 gap-3 mb-5">
        {[
          { l:"Users (total)", v:totals.users, sub:`${totals.active} active`, i:"users", c:"from-indigo-500 to-indigo-700" },
          { l:"Processes", v:totals.processes, sub:"รวมทุก Tenant", i:"workflow", c:"from-emerald-500 to-emerald-700" },
          { l:"Task Instances", v:totals.tasks, sub:"30 วันล่าสุด", i:"table", c:"from-violet-500 to-violet-700" },
          { l:"Storage", v:`${totals.storage.toFixed(1)} GB`, sub:"รวมทุก Tenant", i:"database", c:"from-sky-500 to-sky-700" },
          { l:"Active Tenants", v:tenants.filter(t=>t.service_status==="active").length, sub:`/ ${tenants.length} ทั้งหมด`, i:"building", c:"from-amber-500 to-amber-700" },
        ].map((k,i)=>(
          <div key={i} className="rounded-2xl bg-white/5 border border-white/10 p-4">
            <div className="flex items-center gap-3">
              <div className={`w-10 h-10 rounded-xl bg-gradient-to-br ${k.c} flex items-center justify-center`}><Icon name={k.i} size={16}/></div>
              <div>
                <div className="text-[11px] uppercase tracking-wider text-indigo-200/70">{k.l}</div>
                <div className="text-[22px] font-bold font-mono text-white">{k.v}</div>
                <div className="text-[10.5px] text-indigo-200/60">{k.sub}</div>
              </div>
            </div>
          </div>
        ))}
      </div>
      <div className="rounded-2xl border border-white/10 bg-white/5 p-5">
        <div className="text-[13.5px] font-semibold text-white mb-3">Storage usage per tenant</div>
        <div className="space-y-2.5">
          {tenants.map(t => {
            const pct = maxStorage>0 ? (t.usage.storage_gb / maxStorage * 100) : 0;
            return (
              <div key={t.id}>
                <div className="flex items-center justify-between text-[12px] mb-1">
                  <div className="flex items-center gap-2">
                    <span className="w-6 h-6 rounded-md bg-indigo-500/30 text-indigo-200 text-[10px] font-bold flex items-center justify-center">{t.tenant_code}</span>
                    <span className="text-white">{t.company_short}</span>
                  </div>
                  <span className="font-mono text-indigo-100">{t.usage.storage_gb.toFixed(1)} GB · {t.usage.users} users · {t.usage.tasks} tasks</span>
                </div>
                <div className="h-2 bg-white/5 rounded-full overflow-hidden">
                  <div className="h-full rounded-full bg-gradient-to-r from-indigo-400 to-emerald-400 transition-all" style={{width:`${pct}%`}}/>
                </div>
              </div>
            );
          })}
        </div>
      </div>
    </div>
  );
};

// ----- Audit -----
const SuperAuditPage = ({ auditLog, tenants }) => {
  const [scope, setScope] = useState("super");
  const [q, setQ] = useState("");
  const filtered = auditLog.filter(a => (scope==="all" || a.scope===scope) && (!q || JSON.stringify(a).toLowerCase().includes(q.toLowerCase())));
  const action_meta = {
    create:{ c:"text-emerald-300 bg-emerald-400/10 border-emerald-400/30", i:"plus" },
    activate:{ c:"text-emerald-300 bg-emerald-400/10 border-emerald-400/30", i:"play" },
    suspend:{ c:"text-amber-300 bg-amber-400/10 border-amber-400/30", i:"pause" },
    deactivate:{ c:"text-rose-300 bg-rose-400/10 border-rose-400/30", i:"ban" },
    support_access:{ c:"text-indigo-300 bg-indigo-400/10 border-indigo-400/30", i:"shield" },
    status_change:{ c:"text-violet-300 bg-violet-400/10 border-violet-400/30", i:"refresh" },
    delete:{ c:"text-rose-300 bg-rose-400/10 border-rose-400/30", i:"trash" },
    reset_admin_password:{ c:"text-indigo-300 bg-indigo-400/10 border-indigo-400/30", i:"key" },
  };
  return (
    <div className="text-ink-100">
      <div className="mb-5">
        <div className="text-[11px] uppercase tracking-[.2em] text-indigo-300 font-semibold">Audit Trail</div>
        <h1 className="text-[26px] font-bold tracking-tight mt-1">Audit Logs</h1>
      </div>
      <div className="flex items-center gap-2 mb-3">
        <DarkSegmented value={scope} onChange={setScope} options={[
          { value:"super", label:"Super-level" },
          { value:"tenant", label:"Tenant-level" },
          { value:"all", label:"All" },
        ]}/>
        <div className="relative flex-1 max-w-md">
          <Icon name="search" size={14} className="absolute left-3 top-1/2 -translate-y-1/2 text-indigo-300/70"/>
          <input value={q} onChange={e=>setQ(e.target.value)} placeholder="ค้นหา reason / tenant / action…"
            className="w-full h-9 pl-9 pr-3 text-[13px] bg-white/5 border border-white/10 rounded-lg text-white placeholder:text-indigo-300/40 ring-focus"/>
        </div>
      </div>
      <div className="rounded-2xl border border-white/10 bg-white/5 overflow-hidden">
        <table className="w-full text-[12.5px]">
          <thead>
            <tr className="bg-white/5 text-indigo-200/75 text-[11px] uppercase tracking-wider">
              {["เวลา","Scope","Tenant","Action","Performed by","Reason"].map(h=>(<th key={h} className="text-left font-semibold px-3 py-2.5 border-b border-white/10">{h}</th>))}
            </tr>
          </thead>
          <tbody>
            {filtered.map(a => {
              const tn = tenants.find(t=>t.id===a.tenant_id);
              const m = action_meta[a.action] || { c:"text-indigo-300 bg-indigo-400/10 border-indigo-400/30", i:"info" };
              return (
                <tr key={a.id} className="hover:bg-white/5 border-b border-white/5 last:border-0">
                  <td className="px-3 py-3 font-mono text-indigo-100/85">{a.at}</td>
                  <td className="px-3 py-3"><span className={`text-[10.5px] px-1.5 py-0.5 rounded ${a.scope==="super"?"bg-indigo-500/20 text-indigo-200":"bg-emerald-500/20 text-emerald-200"} uppercase`}>{a.scope}</span></td>
                  <td className="px-3 py-3 text-white">{tn ? `${tn.company_short} [${tn.tenant_code}]` : a.tenant_id}</td>
                  <td className="px-3 py-3">
                    <span className={`inline-flex items-center gap-1.5 text-[11.5px] font-medium border px-2 py-0.5 rounded ${m.c}`}><Icon name={m.i} size={11}/>{a.action}</span>
                  </td>
                  <td className="px-3 py-3 text-white">{a.performed_by}</td>
                  <td className="px-3 py-3 text-indigo-100/85">{a.reason}</td>
                </tr>
              );
            })}
          </tbody>
        </table>
      </div>
    </div>
  );
};

const SystemSettingsPage = () => {
  const toast = useToast();
  const [cfg, setCfg] = useState({
    isolation: "separate_schema",
    support: "logged_24h",
    mfa: true,
    backup: "daily_02",
    email: "raciworks.io",
  });
  return (
    <div className="text-ink-100 max-w-3xl">
      <div className="flex items-end justify-between mb-4 flex-wrap gap-2">
        <h1 className="text-[26px] font-bold tracking-tight">System Settings</h1>
        <SuperButton icon="check" variant="primary" onClick={()=>toast({kind:"success", msg:"บันทึก System Settings เรียบร้อย"})}>บันทึกการตั้งค่า</SuperButton>
      </div>
      <div className="rounded-2xl border border-white/10 bg-white/5 p-5 space-y-4">
        <DarkConfigRow t="Default tenant isolation" sub="ค่าเริ่มต้นเมื่อสร้างบริษัทใหม่">
          <DarkSelect value={cfg.isolation} onChange={e=>setCfg(p=>({...p, isolation:e.target.value}))}>
            <option value="separate_database">Separate Database</option>
            <option value="separate_schema">Separate Schema (แนะนำ)</option>
            <option value="logical_partition">Logical Partition</option>
          </DarkSelect>
        </DarkConfigRow>
        <DarkConfigRow t="Support access policy" sub="ทุกครั้งที่เข้าถึงข้อมูล Tenant จะถูกบันทึก">
          <DarkSelect value={cfg.support} onChange={e=>setCfg(p=>({...p, support:e.target.value}))}>
            <option value="logged_24h">Logged + Time-boxed (24 ชม.)</option>
            <option value="logged_perm">Logged (ไม่กำหนดเวลา)</option>
            <option value="disabled">ปิดการเข้าถึง</option>
          </DarkSelect>
        </DarkConfigRow>
        <DarkConfigRow t="Force MFA" sub="บังคับยืนยันตัวตน 2 ขั้นตอน">
          <button onClick={()=>setCfg(p=>({...p, mfa:!p.mfa}))} className={`relative w-10 h-5 rounded-full transition ${cfg.mfa?"bg-indigo-500":"bg-white/10"}`}>
            <span className={`absolute top-0.5 left-0.5 w-4 h-4 rounded-full bg-white shadow transition-transform ${cfg.mfa?"translate-x-5":""}`}/>
          </button>
        </DarkConfigRow>
        <DarkConfigRow t="Backup frequency" sub="สำรองข้อมูลอัตโนมัติของทุก Tenant">
          <DarkSelect value={cfg.backup} onChange={e=>setCfg(p=>({...p, backup:e.target.value}))}>
            <option value="hourly">Hourly · retention 7 วัน</option>
            <option value="daily_02">Daily 02:00 ICT · retention 30 วัน</option>
            <option value="weekly">Weekly · retention 90 วัน</option>
          </DarkSelect>
        </DarkConfigRow>
        <DarkConfigRow t="Email service domain" sub="ใช้สำหรับแจ้งเตือนระบบ">
          <DarkInput value={cfg.email} onChange={e=>setCfg(p=>({...p, email:e.target.value}))} className="!w-56"/>
        </DarkConfigRow>
      </div>
    </div>
  );
};
const DarkConfigRow = ({ t, sub, children }) => (
  <div className="flex items-start justify-between gap-4 pb-3 border-b border-white/10 last:border-0 last:pb-0">
    <div>
      <div className="text-white font-medium">{t}</div>
      <div className="text-[11.5px] text-indigo-200/65 mt-0.5">{sub}</div>
    </div>
    <div className="shrink-0">{children}</div>
  </div>
);

// --- Edit Company Info modal ---
const EditCompanyModal = ({ tenant, onClose, onSave }) => {
  const [f, setF] = useState({});
  useEffect(() => { if (tenant) setF({ ...tenant }); }, [tenant]);
  if (!tenant) return null;
  const set = (k,v) => setF(p=>({ ...p, [k]:v }));
  return (
    <Modal open onClose={onClose} title={`แก้ไขข้อมูลบริษัท — ${tenant.company_name}`} subtitle={`Tenant ${tenant.tenant_code}`} width={620} tone="dark"
      footer={<>
        <SuperButton variant="ghost" onClick={onClose}>ยกเลิก</SuperButton>
        <SuperButton variant="primary" icon="check" onClick={()=>onSave(f)}>บันทึกการแก้ไข</SuperButton>
      </>}>
      <div className="grid grid-cols-2 gap-3">
        <DarkField label="ชื่อบริษัท" required className="col-span-2"><DarkInput value={f.company_name||""} onChange={e=>set("company_name", e.target.value)}/></DarkField>
        <DarkField label="ชื่อย่อ"><DarkInput value={f.company_short||""} onChange={e=>set("company_short", e.target.value)}/></DarkField>
        <DarkField label="อุตสาหกรรม">
          <DarkSelect value={f.industry||""} onChange={e=>set("industry", e.target.value)}>
            {["การผลิต","ค้าปลีก","บริการ","ขนส่ง","ที่ปรึกษา","ธนาคาร / การเงิน","อื่นๆ"].map(x=><option key={x}>{x}</option>)}
          </DarkSelect>
        </DarkField>
        <DarkField label="ผู้ติดต่อ"><DarkInput value={f.contact_person||""} onChange={e=>set("contact_person", e.target.value)}/></DarkField>
        <DarkField label="เบอร์ติดต่อ"><DarkInput value={f.contact_phone||""} onChange={e=>set("contact_phone", e.target.value)}/></DarkField>
        <DarkField label="อีเมลผู้ติดต่อ" className="col-span-2"><DarkInput type="email" value={f.contact_email||""} onChange={e=>set("contact_email", e.target.value)}/></DarkField>
        <DarkField label="Plan">
          <DarkSelect value={f.plan||"Business"} onChange={e=>set("plan", e.target.value)}>
            {["Starter","Business","Enterprise"].map(x=><option key={x}>{x}</option>)}
          </DarkSelect>
        </DarkField>
        <DarkField label="Seats"><DarkInput type="number" value={f.seats||0} onChange={e=>set("seats", +e.target.value)}/></DarkField>
        <DarkField label="วันเริ่มบริการ"><DarkInput type="date" value={f.service_start_date||""} onChange={e=>set("service_start_date", e.target.value)}/></DarkField>
        <DarkField label="วันสิ้นสุดบริการ"><DarkInput type="date" value={f.service_expiry_date||""} onChange={e=>set("service_expiry_date", e.target.value)}/></DarkField>
      </div>
    </Modal>
  );
};

// --- Edit Admin User modal ---
const EditAdminModal = ({ target, onClose, onSave }) => {
  const [f, setF] = useState({});
  useEffect(() => { if (target) setF({ ...target.admin }); }, [target]);
  if (!target) return null;
  const set = (k,v) => setF(p=>({ ...p, [k]:v }));
  return (
    <Modal open onClose={onClose} title="แก้ไขข้อมูล Company Admin" subtitle={`${target.tenant.company_name} · ${target.tenant.tenant_code}`} width={520} tone="dark"
      footer={<>
        <SuperButton variant="ghost" onClick={onClose}>ยกเลิก</SuperButton>
        <SuperButton variant="primary" icon="check" onClick={()=>onSave(f)}>บันทึก</SuperButton>
      </>}>
      <div className="grid grid-cols-2 gap-3">
        <DarkField label="ชื่อ-นามสกุล" required className="col-span-2"><DarkInput value={f.full_name||""} onChange={e=>set("full_name", e.target.value)}/></DarkField>
        <DarkField label="รหัสพนักงาน"><DarkInput value={f.employee_code||""} onChange={e=>set("employee_code", e.target.value.toUpperCase())} className="font-mono uppercase"/></DarkField>
        <DarkField label="อีเมล / Username" required><DarkInput type="email" value={f.email||""} onChange={e=>set("email", e.target.value)}/></DarkField>
      </div>
      <div className="mt-3 px-3 py-2 rounded-md bg-amber-400/10 border border-amber-400/30 text-amber-200 text-[11.5px] flex items-start gap-2">
        <Icon name="info" size={13} className="mt-0.5 shrink-0"/>
        <span>การแก้ไขรหัสผ่านให้ใช้ปุ่ม <strong>รีเซ็ตรหัสผ่าน</strong> แยกต่างหาก เพื่อความปลอดภัยและการบันทึก Audit Log</span>
      </div>
    </Modal>
  );
};

// --- Reset password modal ---
const ResetPasswordModal = ({ target, onClose, onConfirm, tenantAdmins }) => {
  const [mode, setMode] = useState("link"); // link | manual
  const [pwd, setPwd] = useState({ next:"", confirm:"" });
  useEffect(() => { if (target) { setMode("link"); setPwd({next:"",confirm:""}); } }, [target]);
  if (!target) return null;
  const admin = tenantAdmins?.[target.id] || TENANT_ADMIN_USERS[target.id];
  const canManual = pwd.next.length >= 6 && pwd.next === pwd.confirm;
  return (
    <Modal open onClose={onClose} title="รีเซ็ตรหัสผ่าน Company Admin" subtitle={`${target.company_name} · ${admin?.full_name}`} width={520} tone="dark"
      footer={<>
        <SuperButton variant="ghost" onClick={onClose}>ยกเลิก</SuperButton>
        {mode === "link"
          ? <button onClick={()=>onConfirm("link")} className="inline-flex items-center gap-1.5 h-9 px-3 rounded-lg text-[12.5px] font-medium bg-indigo-500 hover:bg-indigo-400 text-white"><Icon name="key" size={13}/>ส่งลิงก์รีเซ็ต</button>
          : <button disabled={!canManual} onClick={()=>onConfirm("manual", pwd)} className={`inline-flex items-center gap-1.5 h-9 px-3 rounded-lg text-[12.5px] font-medium ${canManual?"bg-amber-500 hover:bg-amber-400 text-white":"bg-white/10 text-indigo-300 cursor-not-allowed"}`}><Icon name="check" size={13}/>ตั้งรหัสผ่านชั่วคราว</button>
        }
      </>}>
      <div className="space-y-3">
        <div className="rounded-lg border border-white/10 bg-white/5 p-3 flex items-center gap-3">
          <Avatar name={admin?.full_name} size={36}/>
          <div className="min-w-0">
            <div className="text-white font-semibold truncate">{admin?.full_name}</div>
            <div className="text-[11.5px] text-indigo-200/75 font-mono truncate">{admin?.email}</div>
          </div>
        </div>
        <div className="flex items-center gap-2">
          <button onClick={()=>setMode("link")} className={`flex-1 px-3 py-2 rounded-lg border text-[12px] font-medium ${mode==="link"?"bg-indigo-500/20 border-indigo-400 text-white":"bg-white/5 border-white/10 text-indigo-200 hover:bg-white/10"}`}>
            <Icon name="link" size={12} className="inline mr-1"/>ส่งลิงก์รีเซ็ตทางอีเมล
          </button>
          <button onClick={()=>setMode("manual")} className={`flex-1 px-3 py-2 rounded-lg border text-[12px] font-medium ${mode==="manual"?"bg-amber-500/20 border-amber-400 text-white":"bg-white/5 border-white/10 text-indigo-200 hover:bg-white/10"}`}>
            <Icon name="key" size={12} className="inline mr-1"/>ตั้งรหัสผ่านชั่วคราว
          </button>
        </div>
        {mode === "manual" && (
          <div className="grid grid-cols-2 gap-3">
            <DarkField label="รหัสผ่านชั่วคราว" required hint="≥ 6 ตัว"><DarkInput type="password" value={pwd.next} onChange={e=>setPwd(p=>({...p, next:e.target.value}))}/></DarkField>
            <DarkField label="ยืนยันรหัสผ่าน" required><DarkInput type="password" value={pwd.confirm} onChange={e=>setPwd(p=>({...p, confirm:e.target.value}))}/></DarkField>
            <div className="col-span-2 px-3 py-2 rounded-md bg-amber-400/10 border border-amber-400/30 text-amber-200 text-[11.5px] flex items-start gap-2">
              <Icon name="alert" size={13} className="mt-0.5 shrink-0"/>
              <span>ผู้ใช้จะถูกบังคับเปลี่ยนรหัสผ่านใหม่เมื่อ login ครั้งถัดไป</span>
            </div>
          </div>
        )}
        {mode === "link" && (
          <div className="px-3 py-2 rounded-md bg-indigo-400/10 border border-indigo-400/30 text-indigo-200 text-[11.5px] flex items-start gap-2">
            <Icon name="info" size={13} className="mt-0.5 shrink-0"/>
            <span>ระบบจะส่งลิงก์รีเซ็ตรหัสผ่านไปยังอีเมล <strong className="font-mono">{admin?.email}</strong> โดยลิงก์ใช้งานได้ภายใน 24 ชม.</span>
          </div>
        )}
      </div>
    </Modal>
  );
};

Object.assign(window, { SuperAdminPortal });
