"use client" import { create } from "zustand" import { SportEnum } from "./betting-types" import type { AppEvent } from "./betting-types" import { fetchEvents, fetchOddsForEvent, apiEventToAppEvent, getListMarketsFromOddsResponse, } from "./betting-api" const LIVE_PAGE_SIZE = 24 /** Start of today in UTC, RFC3339 — for live events first_start_time */ function getFirstStartTimeToday(): string { const d = new Date() d.setUTCHours(0, 0, 0, 0) return d.toISOString() } type LiveState = { events: AppEvent[] loading: boolean error: string | null sportId: number setSportId: (sportId: number) => void loadLiveEvents: () => Promise } export const useLiveStore = create((set, get) => ({ events: [], loading: false, error: null, sportId: SportEnum.SOCCER, setSportId: (sportId) => { set({ sportId }) get().loadLiveEvents() }, loadLiveEvents: async () => { const { sportId } = get() set({ loading: true, error: null }) try { const first_start_time = getFirstStartTimeToday() const res = await fetchEvents({ sport_id: sportId, page: 1, page_size: LIVE_PAGE_SIZE, first_start_time, is_live: true, // no league_id - get all leagues }) const apiEvents = (res.data ?? []).filter((e) => e.is_live === true) const oddsResponses = await Promise.all( apiEvents.map((e) => fetchOddsForEvent(e.id).catch(() => ({ data: [] as typeof res.data }))) ) const newEvents: AppEvent[] = apiEvents.map((e, i) => { const oddsList = oddsResponses[i]?.data ?? [] const listMarkets = getListMarketsFromOddsResponse(oddsList) const appEvent = apiEventToAppEvent(e, listMarkets) as AppEvent appEvent.rawOdds = oddsList return appEvent }) set({ events: newEvents, loading: false }) } catch (err) { set({ loading: false, error: err instanceof Error ? err.message : "Failed to load live events", events: [], }) } }, }))