export type TriggerType = 'click' | 'hover' | 'konami' | 'scroll' | 'sequence' export type RewardType = 'snippet' | 'anecdote' | 'image' | 'badge' export interface EasterEggMeta { slug: string location: string trigger_type: TriggerType difficulty: number } export interface EasterEggReward { slug: string reward_type: RewardType reward: string difficulty: number } interface EasterEggListResponse { data: EasterEggMeta[] meta: { total: number } } interface EasterEggValidateResponse { data: EasterEggReward } export function useFetchEasterEggs() { const config = useRuntimeConfig() const { locale } = useI18n() // Cache des easter eggs disponibles const availableEasterEggs = ref([]) const isLoaded = ref(false) async function fetchList(): Promise { if (isLoaded.value) return availableEasterEggs.value try { const response = await $fetch('/easter-eggs', { baseURL: config.public.apiUrl as string, headers: { 'X-API-Key': config.public.apiKey as string, }, }) availableEasterEggs.value = response.data isLoaded.value = true return response.data } catch { return [] } } async function validate(slug: string): Promise { try { const response = await $fetch(`/easter-eggs/${slug}/validate`, { method: 'POST', baseURL: config.public.apiUrl as string, headers: { 'X-API-Key': config.public.apiKey as string, 'Accept-Language': locale.value, }, }) return response.data } catch { return null } } function getByLocation(location: string): EasterEggMeta[] { return availableEasterEggs.value.filter( e => e.location === location || e.location === 'global' ) } return { availableEasterEggs: readonly(availableEasterEggs), isLoaded: readonly(isLoaded), fetchList, validate, getByLocation, } }