import { BaseApiClient } from '../base/BaseApiClient';
import type {
  AllLeaguesWithCapacityDto,
  LeagueStatsDto,
  LeagueStandingsDto,
  LeagueScheduleDto,
  LeagueMembershipsDto,
  CreateLeagueInputDto,
  CreateLeagueOutputDto,
} from '../../dtos';

/**
 * Leagues API Client
 *
 * Handles all league-related API operations.
 */
export class LeaguesApiClient extends BaseApiClient {
  /** Get all leagues with capacity information */
  getAllWithCapacity(): Promise<AllLeaguesWithCapacityDto> {
    return this.get<AllLeaguesWithCapacityDto>('/leagues/all-with-capacity');
  }

  /** Get total number of leagues */
  getTotal(): Promise<LeagueStatsDto> {
    return this.get<LeagueStatsDto>('/leagues/total-leagues');
  }

  /** Get league standings */
  getStandings(leagueId: string): Promise<LeagueStandingsDto> {
    return this.get<LeagueStandingsDto>(`/leagues/${leagueId}/standings`);
  }

  /** Get league schedule */
  getSchedule(leagueId: string): Promise<LeagueScheduleDto> {
    return this.get<LeagueScheduleDto>(`/leagues/${leagueId}/schedule`);
  }

  /** Get league memberships */
  getMemberships(leagueId: string): Promise<LeagueMembershipsDto> {
    return this.get<LeagueMembershipsDto>(`/leagues/${leagueId}/memberships`);
  }

  /** Create a new league */
  create(input: CreateLeagueInputDto): Promise<CreateLeagueOutputDto> {
    return this.post<CreateLeagueOutputDto>('/leagues', input);
  }

  /** Remove a member from league */
  removeMember(leagueId: string, performerDriverId: string, targetDriverId: string): Promise<{ success: boolean }> {
    return this.patch<{ success: boolean }>(`/leagues/${leagueId}/members/${targetDriverId}/remove`, { performerDriverId });
  }
}