export interface DriverProfileDriverSummaryViewModel {
  id: string;
  name: string;
  country: string;
  avatarUrl: string;
  iracingId: string | null;
  joinedAt: string;
  rating: number | null;
  globalRank: number | null;
  consistency: number | null;
  bio: string | null;
  totalDrivers: number | null;
}

export interface DriverProfileStatsViewModel {
  totalRaces: number;
  wins: number;
  podiums: number;
  dnfs: number;
  avgFinish: number | null;
  bestFinish: number | null;
  worstFinish: number | null;
  finishRate: number | null;
  winRate: number | null;
  podiumRate: number | null;
  percentile: number | null;
  rating: number | null;
  consistency: number | null;
  overallRank: number | null;
}

export interface DriverProfileFinishDistributionViewModel {
  totalRaces: number;
  wins: number;
  podiums: number;
  topTen: number;
  dnfs: number;
  other: number;
}

export interface DriverProfileTeamMembershipViewModel {
  teamId: string;
  teamName: string;
  teamTag: string | null;
  role: string;
  joinedAt: string;
  isCurrent: boolean;
}

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

export interface DriverProfileSocialSummaryViewModel {
  friendsCount: number;
  friends: DriverProfileSocialFriendSummaryViewModel[];
}

export type DriverProfileSocialPlatform = 'twitter' | 'youtube' | 'twitch' | 'discord';

export type DriverProfileAchievementRarity = 'common' | 'rare' | 'epic' | 'legendary';

export interface DriverProfileAchievementViewModel {
  id: string;
  title: string;
  description: string;
  icon: 'trophy' | 'medal' | 'star' | 'crown' | 'target' | 'zap';
  rarity: DriverProfileAchievementRarity;
  earnedAt: string;
}

export interface DriverProfileSocialHandleViewModel {
  platform: DriverProfileSocialPlatform;
  handle: string;
  url: string;
}

export interface DriverProfileExtendedProfileViewModel {
  socialHandles: DriverProfileSocialHandleViewModel[];
  achievements: DriverProfileAchievementViewModel[];
  racingStyle: string;
  favoriteTrack: string;
  favoriteCar: string;
  timezone: string;
  availableHours: string;
  lookingForTeam: boolean;
  openToRequests: boolean;
}

export interface DriverProfileViewModelData {
  currentDriver: DriverProfileDriverSummaryViewModel | null;
  stats: DriverProfileStatsViewModel | null;
  finishDistribution: DriverProfileFinishDistributionViewModel | null;
  teamMemberships: DriverProfileTeamMembershipViewModel[];
  socialSummary: DriverProfileSocialSummaryViewModel;
  extendedProfile: DriverProfileExtendedProfileViewModel | null;
}

/**
 * Driver Profile View Model
 *
 * Represents a fully prepared UI state for driver profile display.
 * Transforms API DTOs into UI-ready data structures.
 */
export class DriverProfileViewModel {
  constructor(private readonly dto: DriverProfileViewModelData) {}

  get currentDriver(): DriverProfileDriverSummaryViewModel | null {
    return this.dto.currentDriver;
  }

  get stats(): DriverProfileStatsViewModel | null {
    return this.dto.stats;
  }

  get finishDistribution(): DriverProfileFinishDistributionViewModel | null {
    return this.dto.finishDistribution;
  }

  get teamMemberships(): DriverProfileTeamMembershipViewModel[] {
    return this.dto.teamMemberships;
  }

  get socialSummary(): DriverProfileSocialSummaryViewModel {
    return this.dto.socialSummary;
  }

  get extendedProfile(): DriverProfileExtendedProfileViewModel | null {
    return this.dto.extendedProfile;
  }

  /**
   * Get the raw DTO for serialization or further processing
   */
  toDTO(): DriverProfileViewModelData {
    return this.dto;
  }
}