import { defineStore } from 'pinia' import type { Track } from '~~/types/types' export const useCardStore = defineStore('card', { state: () => ({ // Stocke les IDs des cartes déjà révélées revealedCards: new Set() }), actions: { // Marquer une carte comme révélée revealCard(trackId: number) { this.revealedCards.add(trackId) this.saveToLocalStorage() }, hideCard(trackId: number) { this.revealedCards.delete(trackId) this.saveToLocalStorage() }, // Vérifier si une carte est révélée isCardRevealed(trackId: number): boolean { return this.revealedCards.has(trackId) }, // Basculer l'état de révélation de toutes les cartes revealAllCards(tracks: Track[]) { tracks.forEach((track) => { this.revealCard(track.id) }) this.saveToLocalStorage() }, hideAllCards(tracks: Track[]) { tracks.forEach((track) => { this.hideCard(track.id) }) this.saveToLocalStorage() }, // Sauvegarder l'état dans le localStorage saveToLocalStorage() { if (typeof window !== 'undefined') { try { localStorage.setItem( 'cardStore', JSON.stringify({ revealedCards: Array.from(this.revealedCards) }) ) } catch (e) { console.error('Failed to save card store to localStorage', e) } } }, // Charger l'état depuis le localStorage loadFromLocalStorage() { if (typeof window !== 'undefined') { try { const saved = localStorage.getItem('cardStore') if (saved) { const { revealedCards } = JSON.parse(saved) if (Array.isArray(revealedCards)) { this.revealedCards = new Set( revealedCards.filter((id): id is number => typeof id === 'number') ) } } } catch (e) { console.error('Failed to load card store from localStorage', e) } } }, // Initialiser le store initialize() { this.loadFromLocalStorage() } }, getters: { // Getter pour la réactivité dans les templates isRevealed: (state) => (trackId: number) => { return state.revealedCards.has(trackId) } } })