import type { Presenter } from '@core/shared/presentation';
import type { FeedItemType } from '@core/social/domain/types/FeedItemType';

export interface DashboardDriverSummaryViewModel {
  id: string;
  name: string;
  country: string;
  avatarUrl: string;
  rating: number | null;
  globalRank: number | null;
  totalRaces: number;
  wins: number;
  podiums: number;
  consistency: number | null;
}

export interface DashboardRaceSummaryViewModel {
  id: string;
  leagueId: string;
  leagueName: string;
  track: string;
  car: string;
  scheduledAt: string;
  status: 'scheduled' | 'running' | 'completed' | 'cancelled';
  isMyLeague: boolean;
}

export interface DashboardRecentResultViewModel {
  raceId: string;
  raceName: string;
  leagueId: string;
  leagueName: string;
  finishedAt: string;
  position: number;
  incidents: number;
}

export interface DashboardLeagueStandingSummaryViewModel {
  leagueId: string;
  leagueName: string;
  position: number;
  totalDrivers: number;
  points: number;
}

export interface DashboardFeedItemSummaryViewModel {
  id: string;
  type: FeedItemType;
  headline: string;
  body?: string;
  timestamp: string;
  ctaLabel?: string;
  ctaHref?: string;
}

export interface DashboardFeedSummaryViewModel {
  notificationCount: number;
  items: DashboardFeedItemSummaryViewModel[];
}

export interface DashboardFriendSummaryViewModel {
  id: string;
  name: string;
  country: string;
  avatarUrl: string;
}

export interface DashboardOverviewViewModel {
  currentDriver: DashboardDriverSummaryViewModel | null;
  myUpcomingRaces: DashboardRaceSummaryViewModel[];
  otherUpcomingRaces: DashboardRaceSummaryViewModel[];
  /**
   * All upcoming races for the driver, already sorted by scheduledAt ascending.
   */
  upcomingRaces: DashboardRaceSummaryViewModel[];
  /**
   * Count of distinct leagues that are currently "active" for the driver,
   * based on upcoming races and league standings.
   */
  activeLeaguesCount: number;
  nextRace: DashboardRaceSummaryViewModel | null;
  recentResults: DashboardRecentResultViewModel[];
  leagueStandingsSummaries: DashboardLeagueStandingSummaryViewModel[];
  feedSummary: DashboardFeedSummaryViewModel;
  friends: DashboardFriendSummaryViewModel[];
}

export type DashboardOverviewResultDTO = DashboardOverviewViewModel;

export interface IDashboardOverviewPresenter
  extends Presenter<DashboardOverviewResultDTO, DashboardOverviewViewModel> {}