using Lagerbestand.Models; namespace Lagerbestand.Services; public interface IKanbanService { // Columns Task> GetColumnsAsync(); Task GetColumnByIdAsync(Guid id); Task CreateColumnAsync(KanbanColumn column); Task UpdateColumnAsync(KanbanColumn column); Task DeleteColumnAsync(Guid id); Task ReorderColumnsAsync(List columnIds); // Labels Task> GetLabelsAsync(); Task GetLabelByIdAsync(Guid id); Task CreateLabelAsync(KanbanLabel label); Task UpdateLabelAsync(KanbanLabel label); Task DeleteLabelAsync(Guid id); // Tasks Task> GetTasksAsync(bool includeArchived = false); Task> GetTasksByColumnAsync(Guid columnId); Task GetTaskByIdAsync(Guid id); Task CreateTaskAsync(KanbanTask task, Guid? userId = null); Task CreateTaskFromTemplateAsync(Guid templateId, string? title = null, Guid? customerId = null, Guid? userId = null); Task UpdateTaskAsync(KanbanTask task, Guid? userId = null); Task MoveTaskAsync(Guid taskId, Guid newColumnId, int newSortOrder, Guid? userId = null); Task DeleteTaskAsync(Guid id); Task ArchiveTaskAsync(Guid id); Task UnarchiveTaskAsync(Guid id); Task> GetRecentlyArchivedTasksAsync(int days = 7); Task ArchiveOldCompletedTasksAsync(int daysAfterCompletion = 30); // Task Todos Task AddTodoAsync(Guid taskId, string text); Task UpdateTodoAsync(KanbanTaskTodo todo); Task ToggleTodoAsync(Guid todoId); Task DeleteTodoAsync(Guid todoId); Task ReorderTodosAsync(Guid taskId, List todoIds); // Task Comments/Chat Task> GetCommentsAsync(Guid taskId); Task AddCommentAsync(Guid taskId, string content, Guid? userId); Task AddActivityAsync(Guid taskId, string activity, Guid? userId = null); // Task Notes Task> GetNotesAsync(Guid taskId); Task AddNoteAsync(Guid taskId, string title, string content); Task UpdateNoteAsync(KanbanTaskNote note, Guid? userId = null); Task DeleteNoteAsync(Guid noteId); // Task Attachments Task> GetAttachmentsAsync(Guid taskId); Task GetAttachmentByIdAsync(Guid id); Task AddAttachmentAsync(Guid taskId, string fileName, string contentType, byte[] content, Guid? userId); Task GetAttachmentContentAsync(Guid attachmentId); Task DeleteAttachmentAsync(Guid attachmentId); // Task Labels Task AddLabelToTaskAsync(Guid taskId, Guid labelId); Task RemoveLabelFromTaskAsync(Guid taskId, Guid labelId); Task SetTaskLabelsAsync(Guid taskId, List labelIds); // Task Assignees Task AddAssigneeAsync(Guid taskId, Guid userId); Task RemoveAssigneeAsync(Guid taskId, Guid userId); Task SetAssigneesAsync(Guid taskId, List userIds, Guid? changedByUserId = null); // Task Customers Task AddCustomerToTaskAsync(Guid taskId, Guid customerId); Task RemoveCustomerFromTaskAsync(Guid taskId, Guid customerId); Task SetTaskCustomersAsync(Guid taskId, Dictionary customerVehicleMap); // Task TireStacks Task AddTireStackToTaskAsync(Guid taskId, Guid tireStackId); Task RemoveTireStackFromTaskAsync(Guid taskId, Guid tireStackId); Task SetTaskTireStacksAsync(Guid taskId, List tireStackIds); // Templates Task> GetTemplatesAsync(); Task GetTemplateByIdAsync(Guid id); Task CreateTemplateAsync(KanbanTaskTemplate template); Task UpdateTemplateAsync(KanbanTaskTemplate template); Task DeleteTemplateAsync(Guid id); // Template Todos Task AddTemplateTodoAsync(Guid templateId, string text); Task DeleteTemplateTodoAsync(Guid todoId); Task SyncTemplateTodosAsync(Guid templateId, List todos); // Template Labels Task SetTemplateLabelsAsync(Guid templateId, List labelIds); // Statistics/Dashboard Task GetStatisticsAsync(); }