import type {
  AdminPackageListParams,
  ProviderPackageListParams,
} from "@/types/catalog";
import type { ProviderListParams } from "@/types/provider";

export const queryKeys = {
  auth: {
    all: ["auth"] as const,
    profile: () => [...queryKeys.auth.all, "profile"] as const,
  },
  providers: {
    all: ["providers"] as const,
    /** Server-mode list — the params object is part of the key so each
     *  page/search/status combination caches separately */
    list: (params: ProviderListParams) =>
      [...queryKeys.providers.all, "list", params] as const,
    detail: (id: string) => [...queryKeys.providers.all, "detail", id] as const,
  },
  catalog: {
    all: ["catalog"] as const,
    /** Admin-owned package list (`/catalog/admin/packages`) */
    adminList: (params: AdminPackageListParams) =>
      [...queryKeys.catalog.all, "admin", "list", params] as const,
    /** The same packages seen through one provider's opt-in state */
    providerList: (params: ProviderPackageListParams) =>
      [...queryKeys.catalog.all, "provider", "list", params] as const,
  },
  customers: {
    all: ["customers"] as const,
    /** Admin-owned customer list (`/customers/admin/list`) */
    adminList: (params: AdminPackageListParams) =>
      [...queryKeys.customers.all, "admin", "list", params] as const,
  },
} as const;
