import type { CreateTaskOptions, CreateTaskResult, ITaskManager, ITaskProvider, LintResult, TaskFile, } from './task-manager.types'; export class TaskManager implements ITaskManager { constructor(private taskProvider: ITaskProvider) {} async startTask(taskId: string): Promise { const task = await this.taskProvider.findTask(taskId); if (!task) { throw new Error(`Task with ID '${taskId}' not found.`); } if (task.status === 'in-progress') { throw new Error(`Task '${taskId}' is already in progress.`); } if (task.status === 'done') { throw new Error(`Task '${taskId}' is already done.`); } const updatedTask: TaskFile = { ...task, status: 'in-progress' }; await this.taskProvider.updateTask(updatedTask); return updatedTask; } async finishTask(taskId: string): Promise { const task = await this.taskProvider.findTask(taskId); if (!task) { throw new Error(`Task with ID '${taskId}' not found.`); } const updatedTask: TaskFile = { ...task, status: 'done' }; await this.taskProvider.updateTask(updatedTask); return updatedTask; } async reviewTask(taskId: string): Promise { const task = await this.taskProvider.findTask(taskId); if (!task) { throw new Error(`Task with ID '${taskId}' not found.`); } if (task.status !== 'in-progress') { throw new Error( `Task '${taskId}' must be in 'in-progress' status to be reviewed. Current status: ${task.status}`, ); } const updatedTask: TaskFile = { ...task, status: 'in-review' }; await this.taskProvider.updateTask(updatedTask); return updatedTask; } async createTask(options: CreateTaskOptions): Promise { return this.taskProvider.createTask(options); } async lint(fix?: boolean): Promise { return this.taskProvider.lint(fix); } }