export interface ListItemProps { id: string; listId: string; title: string; description?: string; isCompleted: boolean; status: string; // 'todo' | 'in_progress' | 'completed' | 'watching' | 'watched' priority: string; // 'low' | 'normal' | 'high' metadata?: Record; dueDate?: Date | null; createdAt: Date; updatedAt: Date; } export class ListItem { constructor(private readonly props: ListItemProps) {} public get id(): string { return this.props.id; } public get listId(): string { return this.props.listId; } public get title(): string { return this.props.title; } public get description(): string { return this.props.description || ''; } public get isCompleted(): boolean { return this.props.isCompleted; } public get status(): string { return this.props.status; } public get priority(): string { return this.props.priority; } public get metadata(): Record | undefined { return this.props.metadata; } public get dueDate(): Date | null | undefined { return this.props.dueDate; } public get createdAt(): Date { return this.props.createdAt; } public get updatedAt(): Date { return this.props.updatedAt; } public toggleCompleted(): void { this.props.isCompleted = !this.props.isCompleted; this.props.status = this.props.isCompleted ? 'completed' : 'todo'; this.props.updatedAt = new Date(); } public updateStatus(status: string): void { this.props.status = status; this.props.isCompleted = (status === 'completed' || status === 'watched'); this.props.updatedAt = new Date(); } public toJSON(): ListItemProps { return { ...this.props }; } }