import {
  MaritalStatus,
  ImmigrationType,
  PlannedTimeline,
  EducationLevel,
  NetWorthRange,
  EducationRecord,
  WorkRecord,
  LanguageScore,
  FamilyMember,
} from '../../domain/entities/user-profile.entity';

// Basic info
export class UpdateBasicInfoDto {
  fullName?: string;
  birthDate?: string; // ISO date string
  nationality?: string;
  currentCountry?: string;
  currentCity?: string;
  maritalStatus?: MaritalStatus;
}

// Immigration intent
export class UpdateImmigrationIntentDto {
  targetCountries?: string[];
  immigrationTypes?: ImmigrationType[];
  plannedTimeline?: PlannedTimeline;
  primaryPurpose?: string;
}

// Education
export class UpdateEducationDto {
  highestEducation?: EducationLevel;
  educationRecords?: EducationRecord[];
}

// Work experience
export class UpdateWorkExperienceDto {
  currentOccupation?: string;
  totalWorkYears?: number;
  workRecords?: WorkRecord[];
}

// Language scores
export class UpdateLanguageScoresDto {
  scores: LanguageScore[];
}

// Family members
export class UpdateFamilyMembersDto {
  members: FamilyMember[];
}

// Financial info
export class UpdateFinancialInfoDto {
  netWorthRange?: NetWorthRange;
  hasBusinessExperience?: boolean;
  businessYears?: number;
}

// Response DTOs
export class UserProfileResponseDto {
  id: string;
  userId: string;
  fullName: string | null;
  birthDate: string | null;
  age: number | null;
  nationality: string | null;
  currentCountry: string | null;
  currentCity: string | null;
  maritalStatus: string | null;
  targetCountries: string[];
  immigrationTypes: string[];
  plannedTimeline: string | null;
  primaryPurpose: string | null;
  highestEducation: string | null;
  educationRecords: EducationRecord[];
  currentOccupation: string | null;
  totalWorkYears: number | null;
  workRecords: WorkRecord[];
  languageScores: LanguageScore[];
  familyMembers: FamilyMember[];
  netWorthRange: string | null;
  hasBusinessExperience: boolean;
  businessYears: number | null;
  hasOverseasExperience: boolean;
  completionPercentage: number;
  createdAt: Date;
  updatedAt: Date;
}

export class ProfileCompletionStatsDto {
  low: number;
  medium: number;
  high: number;
}
