"use client";
import { useEffect, useRef } from "react";
import { LoaderCircle } from "lucide-react";
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
import { useAuthGuard } from "@/lib/use-auth-guard";
import { BackupSettingsCard } from "./components/backup-settings-card";
import { ApiDocsCard } from "./components/api-docs-card";
import { ConfigCard } from "./components/config-card";
import { CPAPoolDialog } from "./components/cpa-pool-dialog";
import { CPAPoolsCard } from "./components/cpa-pools-card";
import { ImportBrowserDialog } from "./components/import-browser-dialog";
import { ProxyRuntimeCard } from "./components/proxy-runtime-card";
import { SettingsHeader } from "./components/settings-header";
import { Sub2APIConnections } from "./components/sub2api-connections";
import { ThirdPartyAppsCard } from "./components/third-party-apps-card";
import { UserKeysCard } from "./components/user-keys-card";
import { useSettingsStore } from "./store";
const settingsTabs = [
{ value: "basic", title: "基础配置" },
{ value: "backup", title: "备份" },
{ value: "keys", title: "用户密钥" },
{ value: "api-docs", title: "接口接入" },
{ value: "canvas", title: "画布入口" },
{ value: "proxy", title: "FlareSolverr" },
{ value: "cpa", title: "CPA" },
{ value: "sub2api", title: "Sub2API" },
];
function SettingsDataController() {
const didLoadRef = useRef(false);
const initialize = useSettingsStore((state) => state.initialize);
const loadPools = useSettingsStore((state) => state.loadPools);
const loadBackups = useSettingsStore((state) => state.loadBackups);
const pools = useSettingsStore((state) => state.pools);
const backupState = useSettingsStore((state) => state.backupState);
useEffect(() => {
if (didLoadRef.current) {
return;
}
didLoadRef.current = true;
void initialize();
}, [initialize]);
useEffect(() => {
const hasRunningJobs = pools.some((pool) => {
const status = pool.import_job?.status;
return status === "pending" || status === "running";
});
if (!hasRunningJobs) {
return;
}
const timer = window.setInterval(() => {
void loadPools(true);
}, 1500);
return () => window.clearInterval(timer);
}, [loadPools, pools]);
useEffect(() => {
if (!backupState?.running) {
return;
}
const timer = window.setInterval(() => {
void loadBackups(true);
}, 3000);
return () => window.clearInterval(timer);
}, [backupState?.running, loadBackups]);
return null;
}
function SettingsPageContent() {
return (
<>