import client from './client' import type { ActiveEvent, MarathonEvent, EventCreate, SwapCandidate, SwapRequestItem, MySwapRequests, CommonEnemyLeaderboardEntry, EventAssignment, CompleteResult, GameChoiceChallenges } from '@/types' export const eventsApi = { getActive: async (marathonId: number): Promise => { const response = await client.get(`/marathons/${marathonId}/event`) return response.data }, list: async (marathonId: number): Promise => { const response = await client.get(`/marathons/${marathonId}/events`) return response.data }, start: async (marathonId: number, data: EventCreate): Promise => { const response = await client.post(`/marathons/${marathonId}/events`, data) return response.data }, stop: async (marathonId: number): Promise => { await client.delete(`/marathons/${marathonId}/event`) }, // Swap requests (two-sided confirmation) createSwapRequest: async (marathonId: number, targetParticipantId: number): Promise => { const response = await client.post(`/marathons/${marathonId}/swap-requests`, { target_participant_id: targetParticipantId, }) return response.data }, getSwapRequests: async (marathonId: number): Promise => { const response = await client.get(`/marathons/${marathonId}/swap-requests`) return response.data }, acceptSwapRequest: async (marathonId: number, requestId: number): Promise => { await client.post(`/marathons/${marathonId}/swap-requests/${requestId}/accept`) }, declineSwapRequest: async (marathonId: number, requestId: number): Promise => { await client.post(`/marathons/${marathonId}/swap-requests/${requestId}/decline`) }, cancelSwapRequest: async (marathonId: number, requestId: number): Promise => { await client.delete(`/marathons/${marathonId}/swap-requests/${requestId}`) }, // Game Choice event getGameChoiceChallenges: async (marathonId: number, gameId: number): Promise => { const response = await client.get(`/marathons/${marathonId}/game-choice/challenges`, { params: { game_id: gameId }, }) return response.data }, selectGameChoiceChallenge: async (marathonId: number, challengeId: number): Promise<{ message: string }> => { const response = await client.post<{ message: string }>(`/marathons/${marathonId}/game-choice/select`, { challenge_id: challengeId, }) return response.data }, getSwapCandidates: async (marathonId: number): Promise => { const response = await client.get(`/marathons/${marathonId}/swap-candidates`) return response.data }, getCommonEnemyLeaderboard: async (marathonId: number): Promise => { const response = await client.get(`/marathons/${marathonId}/common-enemy-leaderboard`) return response.data }, // Event Assignment (Common Enemy) getEventAssignment: async (marathonId: number): Promise => { const response = await client.get(`/marathons/${marathonId}/event-assignment`) return response.data }, completeEventAssignment: async ( assignmentId: number, data: { proof_url?: string; comment?: string; proof_file?: File } ): Promise => { const formData = new FormData() if (data.proof_url) formData.append('proof_url', data.proof_url) if (data.comment) formData.append('comment', data.comment) if (data.proof_file) formData.append('proof_file', data.proof_file) const response = await client.post( `/event-assignments/${assignmentId}/complete`, formData, { headers: { 'Content-Type': 'multipart/form-data' } } ) return response.data }, }