export interface SettingsState {
  DarkMode: boolean;
  selectedTheme: string;
  customshortcuts: CustomShortcut[];
  defaultmenuorder: any[];
  lessonalert: boolean;
  menuitems: {
    assessments: ToggleItem;
    analytics: ToggleItem;
    courses: ToggleItem;
    dashboard: ToggleItem;
    documents: ToggleItem;
    forums: ToggleItem;
    goals: ToggleItem;
    home: ToggleItem;
    messages: ToggleItem;
    myed: ToggleItem;
    news: ToggleItem;
    notices: ToggleItem;
    portals: ToggleItem;
    reports: ToggleItem;
    settings: ToggleItem;
    timetable: ToggleItem;
    welcome: ToggleItem;
    [key: string]: ToggleItem;
  };
  menuorder: any[];
  onoff: boolean;
  selectedColor: string;
  originalSelectedColor: string;
  shortcuts: Shortcut[];
  subjectfilters: Record<string, any>;
  transparencyEffects: boolean;
  justupdated?: boolean;
  privacyStatementShown?: boolean;
  privacyStatementLastUpdated?: string;
  /** One-time announcement: BS Cloud automatic settings sync (last in startup popup queue). */
  bsCloudAutoSyncAnnouncementShown?: boolean;
  /**
   * Calendar month (`YYYY-MM`) for which the user closed the Theme of the Month popup.
   * Cleared automatically when a new month's entry is fetched (different `month`).
   */
  themeOfTheMonthDismissedMonth?: string;
  /** @deprecated Migrated away; no longer read. */
  themeOfTheMonthLastSeenId?: string;
  /** Permanently disables Theme of the Month startup prompts. */
  themeOfTheMonthDisabled?: boolean;
  timeFormat?: string;
  animations: boolean;
  defaultPage: string;
  /** Max subjects with upcoming assessments on the home page; 0 = no limit. */
  homeUpcomingSubjectsMax?: number;
  /** Max assessments shown per subject on the home page; 0 = no limit. */
  homeUpcomingAssessmentsPerSubjectMax?: number;
  /** When true, show past-due assessments from the upcoming list on the home page. */
  homeUpcomingIncludePast?: boolean;
  devMode?: boolean;
  /** Dev-only: emit verboseDebug / verboseInfo / verboseLog output. */
  verboseLogging?: boolean;
  /** Dev-only: keep the loading overlay visible for 5 extra seconds. */
  devDelayLoadingScreen?: boolean;
  /** Dev-only: pretend this is the latest GitHub release version for update badge testing. */
  devGhReleaseVersionOverride?: string;
  /** ISO timestamp of the last acknowledged nightly release publish time. */
  lastSeenNightlyPublishedAt?: string;
  originalDarkMode?: boolean;
  newsSource?: string;
  mockNotices?: boolean;
  hideSensitiveContent?: boolean;
  iconOnlySidebar?: boolean;
  /** Visual style for the custom Learn sidebar (`classic` default). */
  sidebarStyle?: string;
  /** Item density: `compact` | `comfortable` (default) | `large`. */
  sidebarDensity?: string;
  /** Corner radius in px for sidebar items (default `12`). */
  sidebarCornerRadius?: number;
  /** Active item indicator: `fill` (default) | `bar` | `outline` | `underline`. */
  sidebarActiveIndicator?: string;
  /** Sidebar width: `narrow` | `default` (270px) | `wide`. */
  sidebarWidth?: string;
  /** Backdrop blur strength in px when transparency is on (default `50`). */
  sidebarBlur?: number;
  adaptiveThemeColour?: boolean;
  adaptiveThemeGradient?: boolean;
  adaptiveThemeColourTransition?: boolean;
  /** Google Font preset id for SEQTA interface typography (`rubik` default). */
  selectedFont?: string;

  // depreciated keys
  animatedbk: boolean;
  bksliderinput: string;
  lettergrade: boolean;
  assessmentsAverage?: boolean;
  notificationCollector?: boolean;

  // BetterSEQTA Cloud (accounts.betterseqta.org) — stored via CloudAuth, not settingsState
  /** When not `false`, automatic cloud settings sync is enabled (default-on). */
  autoCloudSettingsSync?: boolean;
}

interface ToggleItem {
  toggle: boolean;
}

export interface Shortcut {
  enabled: boolean;
  name: string;
}

export interface CustomShortcut {
  name: string;
  url: string;
  icon: string;
}
