import type { Weekday } from '../types/Weekday'; import { weekdayToIndex } from '../types/Weekday'; import { RacingDomainValidationError } from '../errors/RacingDomainError'; import type { IValueObject } from '@gridpilot/shared/domain'; export interface WeekdaySetProps { days: Weekday[]; } export class WeekdaySet implements IValueObject { private readonly days: Weekday[]; constructor(days: Weekday[]) { if (!Array.isArray(days) || days.length === 0) { throw new RacingDomainValidationError('WeekdaySet requires at least one weekday'); } const unique = Array.from(new Set(days)); this.days = unique.sort((a, b) => weekdayToIndex(a) - weekdayToIndex(b)); } get props(): WeekdaySetProps { return { days: [...this.days] }; } getAll(): Weekday[] { return [...this.days]; } includes(day: Weekday): boolean { return this.days.includes(day); } equals(other: IValueObject): boolean { const a = this.props.days; const b = other.props.days; if (a.length !== b.length) return false; return a.every((day, index) => day === b[index]); } }