import { mapRating } from './constants'; import * as provider from './provider'; import type { AtCoderRating, UserHistory, ContestStandings } from './types'; export async function getUserRating(username: string): Promise { try { const data = await provider.fetchUserRating(username); return { username, display_name: data.display_name, platform: 'atcoder', rating: data.rating, max_rating: data.max_rating, level: mapRating(data.rating), rank: data.rank, contests_participated: data.contests_participated, last_competed: data.last_competed, kyu: data.kyu, country: data.country, birth_year: data.birth_year, avatar: data.avatar, }; } catch (error: any) { console.error(`AtCoder Error for ${username}:`, error.message); throw new Error('Failed to fetch AtCoder user data'); } } export async function getUserHistory(username: string): Promise { try { return await provider.fetchUserHistory(username); } catch (error: any) { console.error(`AtCoder History Error for ${username}:`, error.message); throw new Error('Failed to fetch AtCoder user history'); } } export async function getContestStandings(contestId: string, extended: boolean = false): Promise { try { return await provider.fetchContestStandings(contestId, extended); } catch (error: any) { console.error(`AtCoder Standings Error for ${contestId}:`, error.message); throw new Error('Failed to fetch AtCoder contest standings'); } } export async function getContestResults(contestId: string): Promise { try { return await provider.fetchContestResults(contestId); } catch (error: any) { console.error(`AtCoder Results Error for ${contestId}:`, error.message); throw new Error('Failed to fetch AtCoder contest results'); } } export async function getVirtualStandings(contestId: string, showGhost: boolean = true): Promise { try { return await provider.fetchVirtualStandings(contestId, showGhost); } catch (error: any) { console.error(`AtCoder Virtual Standings Error for ${contestId}:`, error.message); throw new Error('Failed to fetch AtCoder virtual standings'); } }