// Root app — routes between Login / Super Admin / Client Workspace + state management

const App = () => {
  // Session: null = login screen; { kind, ... } when logged in
  const [session, setSession] = useState(null);

  // Super Admin can drill into a tenant in support mode
  const [tenantOpenId, setTenantOpenId] = useState(null);

  // Global SaaS state
  const [tenants, setTenants] = useState(TENANTS);
  const [tenantAdmins, setTenantAdmins] = useState(TENANT_ADMIN_USERS);
  const [auditLog, setAuditLog] = useState(AUDIT_LOG_INIT);

  // Tenant-level state (for now we only have ABC's data; keyed per tenant id for future expansion)
  const [tasks, setTasks] = useState(TASKS_INIT);
  const [taskHistory, setTaskHistory] = useState(TASK_HISTORY);
  const [comments, setComments] = useState(COMMENTS_INIT);
  const [users, setUsers] = useState(USERS);
  const [divisions, setDivisions] = useState(DIVISIONS);
  const [departments, setDepartments] = useState(DEPARTMENTS);
  const [positions, setPositions] = useState(POSITIONS);
  const [mainProcesses, setMainProcesses] = useState(MAIN_PROCESSES.map((m, i) => ({ ...m, display_order: m.display_order ?? m.order ?? i+1 })));
  const [processes, setProcesses] = useState(PROCESSES.map((p, i) => ({ ...p, display_order: p.display_order ?? p.order ?? i+1 })));
  const [subprocesses, setSubprocesses] = useState(SUBPROCESSES.map((s, i) => ({ ...s, display_order: s.display_order ?? i+1 })));

  // Role + user (for demo switching)
  const [currentRole, setCurrentRole] = useState("admin");
  const [currentUserId, setCurrentUserId] = useState(null);

  // Tweaks panel
  const [tweaks, setTweak] = useTweaks(TWEAK_DEFAULTS);
  const [tweaksOpen, setTweaksOpen] = useState(false);

  // Apply dark mode class to html
  useEffect(() => {
    document.documentElement.classList.toggle("dark", !!tweaks.darkMode);
  }, [tweaks.darkMode]);

  // Edit-mode protocol for host toolbar
  useEffect(() => {
    const handler = (e) => {
      if (e.data?.type === "__activate_edit_mode") setTweaksOpen(true);
      if (e.data?.type === "__deactivate_edit_mode") setTweaksOpen(false);
    };
    window.addEventListener("message", handler);
    try { window.parent.postMessage({ type:"__edit_mode_available" }, "*"); } catch {}
    return () => window.removeEventListener("message", handler);
  }, []);

  const handleLogin = (s) => {
    if (s.kind === "super_admin") {
      setSession({ kind:"super_admin", email:s.email });
    } else {
      // tenant
      setSession({ kind:"tenant", tenant_id: s.tenant_id, role: s.role, user_id: s.user_id, email: s.email });
      setCurrentRole(s.role);
      setCurrentUserId(s.user_id);
    }
  };

  const handleLogout = () => {
    setSession(null);
    setTenantOpenId(null);
  };

  // Login screen
  if (!session) {
    return (
      <ToastProvider>
        <LoginScreen onLogin={handleLogin}/>
      </ToastProvider>
    );
  }

  // Super Admin in support mode → render Client workspace for that tenant w/ banner
  if (session.kind === "super_admin" && tenantOpenId) {
    const tenant = tenants.find(t => t.id === tenantOpenId);
    return (
      <ToastProvider>
        <ClientWorkspace tenant={tenant}
          currentRole="admin" setCurrentRole={()=>{}}
          currentUserId={null} setCurrentUserId={()=>{}}
          onLogout={handleLogout}
          onReturnSuperAdmin={()=>setTenantOpenId(null)}
          supportMode={true}
          tweaks={tweaks} setTweak={setTweak}
          tasks={tasks} setTasks={setTasks}
          taskHistory={taskHistory} setTaskHistory={setTaskHistory}
          comments={comments} setComments={setComments}
          auditLog={auditLog} setAuditLog={setAuditLog}
          subprocesses={subprocesses} setSubprocesses={setSubprocesses}
          positions={positions} setPositions={setPositions}
          divisions={divisions} setDivisions={setDivisions}
          departments={departments} setDepartments={setDepartments}
          users={users} setUsers={setUsers}
          mainProcesses={mainProcesses} setMainProcesses={setMainProcesses}
          processes={processes} setProcesses={setProcesses}
        />
        <TweaksPanel tweaks={tweaks} setTweak={setTweak} open={tweaksOpen} onClose={()=>{ setTweaksOpen(false); window.parent.postMessage({ type:"__edit_mode_dismissed" }, "*"); }}/>
      </ToastProvider>
    );
  }

  // Super Admin
  if (session.kind === "super_admin") {
    return (
      <ToastProvider>
        <SuperAdminPortal
          tenants={tenants} setTenants={setTenants}
          auditLog={auditLog} setAuditLog={setAuditLog}
          onLogout={handleLogout}
          tenantOpen={tenantOpenId} setTenantOpen={setTenantOpenId}
          tenantAdmins={tenantAdmins} setTenantAdmins={setTenantAdmins}
        />
        <TweaksPanel tweaks={tweaks} setTweak={setTweak} open={tweaksOpen} onClose={()=>{ setTweaksOpen(false); window.parent.postMessage({ type:"__edit_mode_dismissed" }, "*"); }}/>
      </ToastProvider>
    );
  }

  // Client tenant
  const tenant = tenants.find(t => t.id === session.tenant_id);
  if (!tenant) {
    return <div className="p-10">Tenant not found.</div>;
  }
  return (
    <ToastProvider>
      <ClientWorkspace tenant={tenant}
        currentRole={currentRole} setCurrentRole={setCurrentRole}
        currentUserId={currentUserId} setCurrentUserId={setCurrentUserId}
        onLogout={handleLogout}
        tweaks={tweaks} setTweak={setTweak}
        tasks={tasks} setTasks={setTasks}
        taskHistory={taskHistory} setTaskHistory={setTaskHistory}
        comments={comments} setComments={setComments}
        auditLog={auditLog} setAuditLog={setAuditLog}
        subprocesses={subprocesses} setSubprocesses={setSubprocesses}
        positions={positions} setPositions={setPositions}
        divisions={divisions} setDivisions={setDivisions}
        departments={departments} setDepartments={setDepartments}
        users={users} setUsers={setUsers}
        mainProcesses={mainProcesses} setMainProcesses={setMainProcesses}
        processes={processes} setProcesses={setProcesses}
      />
      <TweaksPanel tweaks={tweaks} setTweak={setTweak} open={tweaksOpen} onClose={()=>{ setTweaksOpen(false); window.parent.postMessage({ type:"__edit_mode_dismissed" }, "*"); }}/>
    </ToastProvider>
  );
};

ReactDOM.createRoot(document.getElementById("root")).render(<App />);
