// The API façade. This file owns NO endpoint logic and NO types of its own — every domain lives in
// its own api/<domain>.ts module (types + method slice together). This barrel only:
//   1. re-exports the shared HTTP machinery from api/core,
//   2. re-exports each domain's TYPES (`export type *`) so consumers import them from "./api"
//      unchanged,
//   3. spreads each domain's method slice into the single `api` object consumers call.
// A new endpoint therefore has nowhere to land except a domain module — the interleave that
// motivated R7.5 cannot re-grow here. (An automated guard for that invariant lands in S3.)
import {
  getActiveAccount,
  HttpError,
  setActiveAccount,
  clearActiveAccount,
  setUnauthorizedHandler,
} from "./api/core";

// Re-export the shared HTTP machinery so consumers keep importing these from "./api" unchanged.
export {
  HttpError,
  getActiveAccount,
  setActiveAccount,
  clearActiveAccount,
  setUnauthorizedHandler,
};

import { accountApi } from "./api/account";
export type * from "./api/account";
import { authApi } from "./api/auth";
export type * from "./api/auth";
import { setupApi } from "./api/setup";
export type * from "./api/setup";
import { feedApi } from "./api/feed";
export type * from "./api/feed";
import { channelsApi } from "./api/channels";
export type * from "./api/channels";
import { syncApi } from "./api/sync";
export type * from "./api/sync";
import { playlistsApi } from "./api/playlists";
export type * from "./api/playlists";
import { tagsApi } from "./api/tags";
export type * from "./api/tags";
import { notificationsApi } from "./api/notifications";
export type * from "./api/notifications";
import { savedViewsApi } from "./api/savedViews";
export type * from "./api/savedViews";
import { quotaApi } from "./api/quota";
export type * from "./api/quota";
import { adminApi } from "./api/admin";
export type * from "./api/admin";
import { plexApi } from "./api/plex";
export type * from "./api/plex";
export { EMPTY_PLEX_FILTERS, plexFilterCount } from "./api/plex";
import { messagingApi } from "./api/messaging";
export type * from "./api/messaging";
import { downloadsApi } from "./api/downloads";
export type * from "./api/downloads";

export const api = {
  ...accountApi,
  ...authApi,
  ...setupApi,
  ...feedApi,
  ...channelsApi,
  ...syncApi,
  ...playlistsApi,
  ...tagsApi,
  ...notificationsApi,
  ...savedViewsApi,
  ...quotaApi,
  ...adminApi,
  ...plexApi,
  ...messagingApi,
  ...downloadsApi,
};
