import { BaseApiClient } from '../base/BaseApiClient';
import type { ApplyPenaltyCommandDTO } from '../../types/generated/ApplyPenaltyCommandDTO';
import type { LeagueAdminProtestsDTO } from '../../types/generated/LeagueAdminProtestsDTO';
import type { RaceProtestsDTO } from '../../types/generated/RaceProtestsDTO';
import type { RequestProtestDefenseCommandDTO } from '../../types/generated/RequestProtestDefenseCommandDTO';
import type { ReviewProtestCommandDTO } from '../../types/generated/ReviewProtestCommandDTO';

/**
 * Protests API Client
 *
 * Handles all protest-related API operations.
 */
export class ProtestsApiClient extends BaseApiClient {
  /** Get protests for a league */
  getLeagueProtests(leagueId: string): Promise<LeagueAdminProtestsDTO> {
    return this.get<LeagueAdminProtestsDTO>(`/leagues/${leagueId}/protests`);
  }

  /** Get a specific protest for a league */
  getLeagueProtest(leagueId: string, protestId: string): Promise<LeagueAdminProtestsDTO> {
    return this.get<LeagueAdminProtestsDTO>(`/leagues/${leagueId}/protests/${protestId}`);
  }

  /** Apply a penalty */
  applyPenalty(input: ApplyPenaltyCommandDTO): Promise<void> {
    return this.post<void>('/races/penalties/apply', input);
  }

  /** Request protest defense */
  requestDefense(input: RequestProtestDefenseCommandDTO): Promise<void> {
    return this.post<void>('/races/protests/defense/request', input);
  }

  /** Review protest */
  reviewProtest(input: ReviewProtestCommandDTO): Promise<void> {
    return this.post<void>(`/protests/${input.protestId}/review`, input);
  }

  /** Get protests for a race */
  getRaceProtests(raceId: string): Promise<RaceProtestsDTO> {
    return this.get<RaceProtestsDTO>(`/races/${raceId}/protests`);
  }
}
