using Data.SeaHavenIndustries; using SeaHaven.Services.DTOs; namespace Api.SeaHavenIndustries.DTOs { public class Location_DTO { public string? Title { get; set; } public string? Name { get; set; } public string? Address { get; set; } public string? City { get; set; } public string? State { get; set; } public string? ZipCode { get; set; } public string? Phone { get; set; } public string? Contact { get; set; } public string? ContactEmail { get; set; } public string? Status { get; set; } public string? AccountId { get; set; } public int? GetAccountId() => LocationAccountIdMapping.ParseOptional(AccountId); // ✅ Map API DTO to Service DTO public CreateLocationDTO ToServiceCreateDTO() { return new CreateLocationDTO { LocationName = this.Name ?? "", Address = this.Address, City = this.City, State = this.State, Zipcode = this.ZipCode }; } // Map from Entity to DTO public static Location_DTO MapToModel(Locations entity) { return new Location_DTO { Title = entity.Title, Name = entity.Name, Address = entity.Address1, City = entity.City, State = entity.State, ZipCode = entity.Zip, Phone = entity.PhoneNumber, Contact = null, // Not in database schema ContactEmail = entity.Email, Status = entity.Status, AccountId = entity.AccountId?.ToString() }; } // Map from DTO to Entity public static Locations MapToEntity(Location_DTO dto, Locations? existingEntity = null) { var entity = existingEntity ?? new Locations(); entity.Title = dto.Title; entity.Name = dto.Name; entity.Address1 = dto.Address; entity.City = dto.City; entity.State = dto.State; entity.Zip = dto.ZipCode; entity.PhoneNumber = dto.Phone; // Contact field doesn't exist in database schema - ignored entity.Email = dto.ContactEmail; entity.Status = dto.Status; return entity; } } // DTO for list views public class LocationListItem_DTO { public int Id { get; set; } public string? Name { get; set; } public string? Title { get; set; } // Map from Entity public static LocationListItem_DTO MapToModel(Locations entity) { return new LocationListItem_DTO { Id = entity.Id, Name = entity.Name, Title = entity.Title }; } // ✅ Map from Service DTO (no logic in controller) public static LocationListItem_DTO FromServiceDTO(LocationDTO serviceDto) { return new LocationListItem_DTO { Id = serviceDto.Id, Name = serviceDto.Name ?? serviceDto.Title, Title = serviceDto.Title ?? serviceDto.Name }; } // ✅ Map collection from Service DTOs public static IEnumerable FromServiceDTOs(IEnumerable serviceDtos) { return serviceDtos.Select(FromServiceDTO); } } // DTO for location dropdown/simple view public class LocationViewModel_DTO { public int? Id { get; set; } public string? Name { get; set; } // ✅ Map from Service DTO public static LocationViewModel_DTO FromServiceDTO(LocationDTO serviceDto) { return new LocationViewModel_DTO { Id = serviceDto.Id, Name = serviceDto.Name ?? serviceDto.Title }; } // ✅ Map collection from Service DTOs public static IEnumerable FromServiceDTOs(IEnumerable serviceDtos) { return serviceDtos.Select(FromServiceDTO); } } }