import { useState, useCallback } from "preact/hooks"; import { useT } from "../../../shared/i18n/context"; import { useRotationSettings, type RotationStrategy } from "../../../shared/hooks/use-rotation-settings"; import { useSettings } from "../../../shared/hooks/use-settings"; type Mode = "sticky" | "rotation"; type RotationSub = "least_used" | "round_robin"; function toMode(strategy: RotationStrategy): Mode { return strategy === "sticky" ? "sticky" : "rotation"; } function toStrategy(mode: Mode, sub: RotationSub): RotationStrategy { return mode === "sticky" ? "sticky" : sub; } export function RotationSettings() { const t = useT(); const settings = useSettings(); const rs = useRotationSettings(settings.apiKey); const current = rs.data?.rotation_strategy ?? "least_used"; const currentMode = toMode(current); const currentSub: RotationSub = current === "sticky" ? "least_used" : (current as RotationSub); const [draftMode, setDraftMode] = useState(null); const [draftSub, setDraftSub] = useState(null); const [collapsed, setCollapsed] = useState(true); const displayMode = draftMode ?? currentMode; const displaySub = draftSub ?? currentSub; const displayStrategy = toStrategy(displayMode, displaySub); const isDirty = displayStrategy !== current; const handleSave = useCallback(async () => { if (!isDirty) return; await rs.save({ rotation_strategy: displayStrategy }); setDraftMode(null); setDraftSub(null); }, [isDirty, displayStrategy, rs]); const radioCls = "w-4 h-4 text-primary focus:ring-primary cursor-pointer"; const labelCls = "text-[0.8rem] font-medium text-slate-700 dark:text-text-main cursor-pointer"; return (
{!collapsed && (

{t("rotationStrategyHint")}

{/* Mode: Sticky vs Rotation */}
{/* Sticky */} {/* Rotation */} {/* Sub-strategy (only when rotation mode) */} {displayMode === "rotation" && (
)}
{/* Save button + status */}
{rs.saved && ( {t("rotationSaved")} )} {rs.error && ( {rs.error} )}
)}
); }