import { DriverDto } from '../dtos';

export class UserProfileViewModel implements DriverDto {
  id: string;
  name: string;
  avatarUrl?: string;
  iracingId?: string;
  rating?: number;

  constructor(dto: DriverDto) {
    Object.assign(this, dto);
  }

  /** UI-specific: Formatted rating */
  get formattedRating(): string {
    return this.rating ? this.rating.toFixed(0) : 'Unrated';
  }

  /** UI-specific: Whether has iRacing ID */
  get hasIracingId(): boolean {
    return !!this.iracingId;
  }

  /** UI-specific: Profile completeness percentage */
  get profileCompleteness(): number {
    let complete = 1; // id always there
    if (this.avatarUrl) complete++;
    if (this.iracingId) complete++;
    if (this.rating) complete++;
    return Math.round((complete / 4) * 100);
  }

  /** UI-specific: Avatar initials */
  get avatarInitials(): string {
    return this.name.split(' ').map(n => n[0]).join('').toUpperCase();
  }
}