import "server-only";
import type { SportsLobbyBoostedOdd, SportsLobbyEvent, SportsLobbyPromotion, SportsLobbySport } from "@/components/sports-lobby";
import { localizeCompetitionName, localizeSelectionName, localizeTeamName } from "@/lib/sports-localization";
import type { getSportsbookLobby } from "@/server/queries/lobby";

type SportsbookLobbyData = Awaited<ReturnType<typeof getSportsbookLobby>>;

export function toSportsLobbySports(sports: SportsbookLobbyData["sports"]): SportsLobbySport[] {
  return sports.map((sport) => ({
    id: sport.id,
    slug: sport.slug,
    name: sport.name
  }));
}

export function toSportsLobbyEvents(events: SportsbookLobbyData["events"]): SportsLobbyEvent[] {
  return events.map((event) => ({
    id: event.id,
    homeName: localizeTeamName(event.homeName),
    awayName: localizeTeamName(event.awayName),
    startsAt: event.startsAt.toISOString(),
    isLive: event.isLive,
    minute: event.minute,
    scoreHome: event.scoreHome,
    scoreAway: event.scoreAway,
    sport: {
      slug: event.sport.slug,
      name: event.sport.name
    },
    competition: {
      country: localizeCompetitionName(event.competition.country),
      name: localizeCompetitionName(event.competition.name)
    },
    markets: event.markets.map((market) => ({
      id: market.id,
      key: market.key,
      name: market.name,
      selections: market.selections.map((selection) => ({
        id: selection.id,
        key: selection.key,
        name: localizeSelectionName(selection.name),
        odds: selection.odds.toString(),
        oddsVersion: selection.oddsVersion
      }))
    }))
  }));
}

export function toSportsLobbyBoostedOdds(boostedOdds: SportsbookLobbyData["boostedOdds"]): SportsLobbyBoostedOdd[] {
  return boostedOdds.map((boostedOdd) => ({
    id: boostedOdd.id,
    title: boostedOdd.title,
    category: {
      id: boostedOdd.category.id,
      name: boostedOdd.category.name,
      sortOrder: boostedOdd.category.sortOrder
    },
    teamA: localizeTeamName(boostedOdd.teamA),
    teamB: localizeTeamName(boostedOdd.teamB),
    startsAt: boostedOdd.startsAt.toISOString(),
    betLabel: boostedOdd.betLabel,
    originalOdds: boostedOdd.originalOdds.toString(),
    boostedOdds: boostedOdd.boostedOdds.toString(),
    maxStake: boostedOdd.maxStake.toString(),
    allowCombinations: boostedOdd.allowCombinations,
    terms: boostedOdd.terms,
    sortOrder: boostedOdd.sortOrder,
    event: {
      id: boostedOdd.event.id,
      sport: {
        slug: boostedOdd.event.sport.slug,
        name: boostedOdd.event.sport.name
      },
      competition: {
        country: localizeCompetitionName(boostedOdd.event.competition.country),
        name: localizeCompetitionName(boostedOdd.event.competition.name)
      }
    },
    market: {
      id: boostedOdd.market.id,
      name: boostedOdd.market.name
    },
    selection: {
      id: boostedOdd.selection.id,
      oddsVersion: boostedOdd.selection.oddsVersion
    }
  }));
}

export function toSportsLobbyPromotions(promotions: SportsbookLobbyData["sportsPromotions"]): SportsLobbyPromotion[] {
  return promotions.map((promotion) => ({
    id: promotion.id,
    title: promotion.title,
    subtitle: promotion.subtitle,
    badge: promotion.badge,
    imageUrl: promotion.imageUrl,
    href: promotion.href
  }));
}
