import type { LocaleCode } from '@/lib/locales' import type { FetchNicoTagsParams, FetchMaterialsParams, FetchPostsParams, FetchTagsParams, MaterialFilter, } from '@/types' export const localesKeys = { root: ['locales'] as const, index: ['locales', 'index'] as const } export const postsKeys = { root: ['posts'] as const, index: ( p: FetchPostsParams, locale: LocaleCode = 'ja', ) => ['posts', locale, 'index', p] as const, show: ( id: string, locale: LocaleCode = 'ja', ) => ['posts', locale, id] as const, related: ( id: string, locale: LocaleCode = 'ja', ) => ['related', locale, id] as const, changes: ( p: { post?: string tag?: string externalTag?: string page: number limit: number }, locale: LocaleCode = 'ja', ) => ['posts', locale, 'changes', p] as const } export const gekanatorKeys = { root: ['gekanator'] as const, posts: ( locale: LocaleCode = 'ja', ) => ['gekanator', locale, 'posts'] as const, questions: ( locale: LocaleCode = 'ja', ) => ['gekanator', locale, 'questions'] as const, extraQuestions: ( gameId: number, nonce: string, locale: LocaleCode = 'ja', ) => ['gekanator', locale, 'games', gameId, 'extra-questions', nonce] as const } export const tagsKeys = { root: ['tags'] as const, index: ( p: FetchTagsParams, locale: LocaleCode = 'ja', ) => ['tags', locale, 'index', p] as const, nicoRoot: ['tags', 'nico'] as const, nicoIndex: ( p: FetchNicoTagsParams, locale: LocaleCode = 'ja', ) => ['tags', locale, 'nico', 'index', p] as const, externalShow: ( id: string, locale: LocaleCode = 'ja', ) => ['tags', locale, 'nico', id] as const, show: ( name: string, locale: LocaleCode = 'ja', ) => ['tags', locale, name] as const, changes: ( p: { id?: string; page: number; limit: number }, locale: LocaleCode = 'ja', ) => ['tags', locale, 'changes', p] as const, deerjikists: ( id: string, locale: LocaleCode = 'ja', ) => ['tags', locale, 'deerjikists', id] as const } export const materialsKeys = { root: ['materials'] as const, index: ( p: FetchMaterialsParams, locale: LocaleCode = 'ja', ) => ['materials', locale, 'index', p] as const, changes: ( p: { materialId?: string tag?: string eventType?: string page: number limit: number }, locale: LocaleCode = 'ja', ) => ['materials', locale, 'changes', p] as const, byTagName: ( name: string, materialFilter: MaterialFilter, locale: LocaleCode = 'ja', ) => ['materials', locale, 'tag', name, materialFilter] as const, show: ( id: string, locale: LocaleCode = 'ja', ) => ['materials', locale, id] as const, suppressions: ( locale: LocaleCode = 'ja', ) => ['materials', locale, 'suppressions'] as const, tree: ( p: { parentId?: number | null materialFilter: MaterialFilter }, locale: LocaleCode = 'ja', ) => ['materials', locale, 'tree', p] as const, unclassified: ( p: { page?: number; limit?: number } = { }, locale: LocaleCode = 'ja', ) => ['materials', locale, 'unclassified', p] as const} export const wikiKeys = { root: ['wiki'] as const, index: ( p: { title?: string }, locale: LocaleCode = 'ja', ) => ['wiki', locale, 'index', p] as const, show: ( title: string, p: { version?: string }, locale: LocaleCode = 'ja', ) => ['wiki', locale, title, p] as const, changes: (p: { id?: string }, locale: LocaleCode = 'ja') => ['wiki', locale, 'changes', 'index', p] as const } export const helpKeys = { root: ['help'] as const, index: (language: string) => ['help', 'index', language] as const, titles: (language: string) => ['help', 'titles', language] as const, article: (identifier: string) => ['help', 'article', identifier] as const, edition: (identifier: string, language: string, edition: string) => ['help', 'edition', identifier, language, edition] as const, diff: (identifier: string, language: string, from: string, to: string) => ['help', 'diff', identifier, language, from, to] as const, changes: (language: string) => ['help', 'changes', language] as const }