// import { RiotRateLimiter } from '@fightmegg/riot-rate-limiter'
import RiotRateLimiter from 'riot-ratelimiter'
import { LeagueEntriesByQueue } from 'App/Services/SummonerService'
import { JaxConfig } from '../../JaxConfig'
import JaxRequest from '../JaxRequest'

export interface CurrentGameInfo {
  gameId: number,
  gameType: string
  gameStartTime: number,
  mapId: number,
  gameLength: number,
  platformId: string,
  gameMode: string,
  bannedChampions: BannedChampion[],
  gameQueueConfigId: number,
  observers: Observer,
  participants: CurrentGameParticipant[],
}

export interface BannedChampion {
  pickTurn: number,
  championId: number,
  teamId: number,
}

export interface Observer {
  encryptionKey: string,
}

export interface CurrentGameParticipant {
  championId: number,
  perks: Perks,
  profileIconId: number,
  bot: boolean,
  teamId: number,
  summonerName: string,
  summonerId: string,
  spell1Id: number,
  spell2Id: number,
  gameCustomizationObjects: GameCustomizationObject[],
  // Custom types from here
  role?: string,
  runes?: { primaryRune: string, secondaryRune: string } | {}
  level?: number,
  rank?: LeagueEntriesByQueue
}

export interface Perks {
  perkIds: number[]
  perkStyle: number,
  perkSubStyle: number
}

export interface GameCustomizationObject {
  category: string,
  content: string
}

export default class SpectatorEndpoint {
  private config: JaxConfig
  private limiter: RiotRateLimiter

  constructor (config: JaxConfig, limiter: RiotRateLimiter) {
    this.config = config
    this.limiter = limiter
  }

  public summonerID (summonerID: string, region: string) {
    return new JaxRequest(
      region,
      this.config,
      `spectator/v4/active-games/by-summoner/${summonerID}`,
      this.limiter,
      0
    ).execute()
  }
}
