import {
  IsInt,
  IsString,
  IsOptional,
  IsBoolean,
  Min,
  Max,
  Matches,
} from 'class-validator';

export class CreateTimetableEntryDto {
  @IsInt()
  @Min(1, { message: 'dayOfWeek muss zwischen 1 (Montag) und 5 (Freitag) sein' })
  @Max(5, { message: 'dayOfWeek muss zwischen 1 (Montag) und 5 (Freitag) sein' })
  dayOfWeek: number;

  @IsString()
  @Matches(/^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$/, {
    message: 'startTime muss im Format HH:MM sein (z.B. 08:00)',
  })
  startTime: string;

  @IsString()
  @Matches(/^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$/, {
    message: 'endTime muss im Format HH:MM sein (z.B. 09:30)',
  })
  endTime: string;

  @IsOptional()
  @IsInt()
  subjectId?: number; // Foreign Key zu Subject

  @IsOptional()
  @IsString()
  subjectName?: string; // Alternativ: Name des Fachs

  @IsOptional()
  @IsInt()
  teacherId?: number; // Foreign Key zu User (Lehrer)

  @IsOptional()
  @IsInt()
  roomId?: number; // Foreign Key zu Room

  @IsOptional()
  @IsString()
  roomNumber?: string; // Alternativ: Raumnummer

  @IsOptional()
  @IsInt()
  @Min(1, { message: 'weekNumber muss zwischen 1 und 53 sein' })
  @Max(53, { message: 'weekNumber muss zwischen 1 und 53 sein' })
  weekNumber?: number;

  @IsOptional()
  @IsInt()
  @Min(2020, { message: 'year muss ein gültiges Jahr sein' })
  @Max(2100, { message: 'year muss ein gültiges Jahr sein' })
  year?: number;

  @IsOptional()
  @IsBoolean()
  isRecurring?: boolean;

  @IsOptional()
  @IsBoolean()
  allowStudentUploads?: boolean;
}
