import { apiRequest } from "@/lib/api/api-service"; import { ApiResponse } from "@/types/api-response"; /** * Spor Toto Service * Backend: /api/spor-toto/* */ // ======================== // Request DTOs // ======================== export interface CreateBulletinDto { gameCycleNo: number; drawDate: string; matches: { matchId: string; homeTeam: string; awayTeam: string; matchDate: string; }[]; } export interface UpdateResultsDto { results: { matchIndex: number; homeScore: number; awayScore: number; }[]; } export interface GenerateColumnsDto { selections: { matchIndex: number; picks: ("1" | "X" | "2")[] }[]; strategy?: "FULL" | "REDUCED"; maxColumns?: number; } export interface EvaluateColumnsDto { bulletinId: string; columns: string[]; } export interface GenerateSporTotoPredictionDto { bulletinId: string; strategy?: "CONSERVATIVE" | "BALANCED" | "AGGRESSIVE" | "FORMULA_6PCT"; } // ======================== // Response DTOs // ======================== export interface SporTotoMatchDto { id: string; matchIndex: number; homeTeam: string; awayTeam: string; matchDate: string; result?: string; homeScore?: number; awayScore?: number; prediction?: { pick: string; confidence: number; odds: Record; }; } export interface SporTotoBulletinDto { id: string; gameCycleNo: number; drawDate: string; status: string; matches: SporTotoMatchDto[]; totalPool?: number; dividends?: Record; createdAt: string; } export interface SporTotoStatsDto { poolDistribution: Record; expectedValue: Record; rolloverAmount: number; consecutiveRollovers: number; } export interface ColumnGenerationResultDto { columns: string[]; totalCost: number; strategy: string; } export interface ColumnEvaluationResultDto { results: { column: string; correct: number }[]; summary: Record; } export interface SporTotoPredictionResultDto { bulletin: SporTotoBulletinDto; matchAnalysis: Record; systemCoupon: { columns: string[]; cost: number; }; evReport: { expectedValue: number; playRecommendation: string; }; } export interface RolloverHistoryItemDto { bulletinId: string; gameCycleNo: number; rolloverAmount: number; drawDate: string; } // ======================== // Service Methods // ======================== const syncFromApi = () => { return apiRequest>({ url: "/spor-toto/sync", client: "core", method: "post", }); }; const listBulletins = (status?: string, limit?: number) => { return apiRequest>({ url: "/spor-toto/bulletins", client: "core", method: "get", params: { status, limit }, }); }; const getBulletinById = (id: string) => { return apiRequest>({ url: `/spor-toto/bulletins/${id}`, client: "core", method: "get", }); }; const createBulletin = (dto: CreateBulletinDto) => { return apiRequest>({ url: "/spor-toto/bulletins", client: "core", method: "post", data: dto, }); }; const updateResults = (id: string, dto: UpdateResultsDto) => { return apiRequest>({ url: `/spor-toto/bulletins/${id}/results`, client: "core", method: "patch", data: dto, }); }; const getBulletinStats = (id: string) => { return apiRequest>({ url: `/spor-toto/bulletins/${id}/stats`, client: "core", method: "get", }); }; const getRolloverHistory = (limit?: number) => { return apiRequest>({ url: "/spor-toto/history", client: "core", method: "get", params: { limit }, }); }; const generateColumns = (dto: GenerateColumnsDto) => { return apiRequest>({ url: "/spor-toto/columns/generate", client: "core", method: "post", data: dto, }); }; const evaluateColumns = (dto: EvaluateColumnsDto) => { return apiRequest>({ url: "/spor-toto/columns/evaluate", client: "core", method: "post", data: dto, }); }; const generatePrediction = (dto: GenerateSporTotoPredictionDto) => { return apiRequest>({ url: "/spor-toto/predict", client: "core", method: "post", data: dto, }); }; export const sporTotoService = { syncFromApi, listBulletins, getBulletinById, createBulletin, updateResults, getBulletinStats, getRolloverHistory, generateColumns, evaluateColumns, generatePrediction, };