the-tip-top-frontend/hooks/useGame.ts
2025-11-17 23:38:02 +01:00

60 lines
1.7 KiB
TypeScript

import { useState } from 'react';
import { gameService } from '@/services/game.service';
import { PlayGameResponse, Ticket, PaginatedResponse } from '@/types';
import toast from 'react-hot-toast';
export const useGame = () => {
const [isPlaying, setIsPlaying] = useState(false);
const [isLoadingTickets, setIsLoadingTickets] = useState(false);
const play = async (ticketCode: string): Promise<PlayGameResponse | null> => {
setIsPlaying(true);
try {
const result = await gameService.play(ticketCode);
toast.success(result.message || 'Vous avez gagné !');
return result;
} catch (error: any) {
console.error('🎲 [useGame] Erreur lors du jeu:', error);
const errorMessage = error.message || error.data?.message || 'Erreur lors de la participation';
toast.error(errorMessage);
return null;
} finally {
setIsPlaying(false);
}
};
const getMyTickets = async (
page = 1,
limit = 10
): Promise<PaginatedResponse<Ticket> | null> => {
setIsLoadingTickets(true);
try {
const tickets = await gameService.getMyTickets(page, limit);
return tickets;
} catch (error: any) {
toast.error(error.message || 'Erreur lors du chargement des tickets');
return null;
} finally {
setIsLoadingTickets(false);
}
};
const getTicketDetails = async (ticketId: string): Promise<Ticket | null> => {
try {
const ticket = await gameService.getTicketDetails(ticketId);
return ticket;
} catch (error: any) {
toast.error(error.message || 'Erreur lors du chargement du ticket');
return null;
}
};
return {
play,
getMyTickets,
getTicketDetails,
isPlaying,
isLoadingTickets,
};
};