using Data.SeaHavenIndustries; using Data.SeaHavenIndustries.Enums; using SeaHaven.Services.DTOs; namespace SeaHaven.Services.Helpers { public static class WorkOrderMediaProjection { public static List ProjectAll( WorkOrder workOrder, IEnumerable attachments) { var media = new List(); var attachmentId = -1; if (!string.IsNullOrWhiteSpace(workOrder.BeforPhotoAttachment)) { media.Add(new WorkOrderMediaFileDto { Id = attachmentId--, Category = WorkOrderMediaCategory.Before, Url = workOrder.BeforPhotoAttachment, FileName = ExtractFileName(workOrder.BeforPhotoAttachment), IsLegacy = true }); } if (!string.IsNullOrWhiteSpace(workOrder.AfterPhotoAttachment)) { media.Add(new WorkOrderMediaFileDto { Id = attachmentId--, Category = WorkOrderMediaCategory.After, Url = workOrder.AfterPhotoAttachment, FileName = ExtractFileName(workOrder.AfterPhotoAttachment), IsLegacy = true }); } if (!string.IsNullOrWhiteSpace(workOrder.SignOffAttachment)) { media.Add(new WorkOrderMediaFileDto { Id = attachmentId--, Category = WorkOrderMediaCategory.Completion, Url = workOrder.SignOffAttachment, FileName = ExtractFileName(workOrder.SignOffAttachment), IsLegacy = true }); } foreach (var attachment in attachments.Where(a => a.IsDeleted != true)) { if (string.IsNullOrWhiteSpace(attachment.Attachments)) continue; media.Add(new WorkOrderMediaFileDto { Id = attachment.Id, Category = attachment.Category ?? WorkOrderMediaCategory.Extra, Url = attachment.Attachments, FileName = ExtractFileName(attachment.Attachments), UploadedAt = attachment.CreatedDate?.ToUniversalTime().ToString("o"), IsLegacy = false }); } return media; } private static string? ExtractFileName(string url) { if (string.IsNullOrWhiteSpace(url)) return null; var lastSlash = url.LastIndexOf('/'); var segment = lastSlash >= 0 && lastSlash < url.Length - 1 ? url[(lastSlash + 1)..] : url; try { return Uri.UnescapeDataString(segment); } catch (Exception) { return segment; } } } }