using System.Security.Claims; using Data.SeaHavenIndustries; using Data.SeaHavenIndustries.Enums; using Microsoft.AspNetCore.Http; using SeaHaven.DataServices.Models; using SeaHaven.Services.DTOs; namespace SeaHaven.Services.Interfaces { public interface IWorkOrderService { Task GetWorkOrderByIdAsync(int id); Task GetWorkOrderByIdWithDetailsAsync(int id); Task> GetAllWorkOrdersAsync(); Task> GetWorkOrdersPagedAsync(int page, int pageSize, string? search = null, string? status = null, string? priority = null); Task CreateWorkOrderAsync(CreateWorkOrderDTO dto, ClaimsPrincipal user, string userId); Task UpdateWorkOrderAsync(int id, UpdateWorkOrderDTO dto, string userId); Task DeleteWorkOrderAsync(int id, string userId); Task WorkOrderExistsAsync(int id); Task GenerateNextInternalWONumberAsync(); Task GetTotalWorkOrderCountAsync(); Task<(IEnumerable Items, int TotalCount)> GetWorkOrderListPagedAsync( int page, int pageSize, string? search, string? status, string? assignee, int? locationId, string? sortBy, string? sortDir, int? accountId = null); Task GetWorkOrderDetailAsync(int id, int? accountId = null); Task GetFilteredWorkOrdersAsync( string[] assignto, int[]? location, string[]? priority, string[]? status, string[]? duedate, string search, string sort, string sortby, int page, int pageSize, int? accountId = null); Task GetFilteredWorkOrders2Async( string[] assignto, int[]? location, string[]? priority, string[]? status, string[]? duedate, string search, string sort, string sortby, int page, int pageSize, int? accountId = null); Task ChangeStatusAsync(int id, string status, string userId); Task ChangeAssignmentAsync(int id, string? assignTo, string userId); Task CreateWorkOrderWithDetailsAsync(CreateWorkOrderWithDetailsInput input, ClaimsPrincipal user, string userId); Task UpdateWorkOrderWithDetailsAsync(UpdateWorkOrderWithDetailsInput input, string userId); Task DeleteWorkOrderCascadeAsync(int id, string userId); Task AddCommentAsync(AddCommentInput input, ClaimsPrincipal user, string userId); Task AddCommentJsonAsync(AddCommentInput input, ClaimsPrincipal user, string userId); Task> GetCommentsAsync(ClaimsPrincipal user); Task?> GetCommentsByWorkorderIdAsync(int woid, ClaimsPrincipal user); Task> GetWorkordersDDAsync(int? accountId = null); Task> GetWorkordersAsync(int? accountId = null); } }