using IWS5.Core.DTO;
using IWS5.Core.Models;
using IWS5.Core.Models.Request;

namespace IWS5.Core.Services;

public interface IWorkItemService
{
    Task<CodeResponse<List<WorkItemListItemDTO>>> ListWorkItems(WorkItemByQueueRequest workItemByQueueRequest);
    Task<CodeResponse<List<WorkItemInboxListItemDto>>> ListWorkItems(BaseRequest request);
    Task<Response<WorkItemListItemDTO>> CreateWorkItemAsync(CreateWorkItemRequest createWorkItemRequest, string userName);
    Task<CodeResponse<WorkItemListItemDTO>> CloneWorkItemAsync(CloneWorkItemRequest cloneWorkItemRequest, string userName);
    Task<Response<String>> LockWorkItemAsync(int workItemReferenceId, string userName);
    Task<Response<String>> UnlockWorkItemAsync(int workItemReferenceId);
    Task<CodeResponse<WorkItemListItemDTO>> ForwardWorkItemAsync(ForwardWorkItemRequest forwardWorkItemRequest, string userName);
    Task<bool> IsLockedForUserByWorkItemReferenceId(int workItemReferenceId, string userName);
    Task<Response<String>> RenameWorkItemAsync(string newName, int workitemRefId);
    Task<Response<string>> DeleteWorkItemsAsync(IEnumerable<int> workItemIds, CancellationToken ct = default);
}