namespace SeaHaven.Services.DTOs { public sealed class VendorPortalTokenStateDTO { public required string Token { get; init; } public DateTime IssuedAt { get; init; } public DateTime ExpiresAt { get; init; } public DateTime? LastUsedAt { get; init; } } public class VendorPortalTokenDTO { public string Token { get; set; } = string.Empty; public DateTime IssuedAt { get; set; } public DateTime ExpiresAt { get; set; } public DateTime? LastUsedAt { get; set; } public string PortalUrl { get; set; } = string.Empty; } public class VendorDropdownItemDTO { public int Id { get; set; } public string? CompanyName { get; set; } public string? ContactName { get; set; } public string? PreferredContact { get; set; } public string? TradeSpecialties { get; set; } public string? Address { get; set; } public double? DistanceMiles { get; set; } } public class VendorFacetCompanyDTO { public string? Name { get; set; } public int? CompanyId { get; set; } public string? CompanyPhone { get; set; } public string? Email { get; set; } public string? PreferredContact { get; set; } public string? Address { get; set; } public string? City { get; set; } public string? State { get; set; } public string? Zip { get; set; } public string? GoogleMapsUrl { get; set; } } public class VendorFacetLocationDTO { public string? City { get; set; } public string? State { get; set; } public string? Label { get; set; } } public class VendorJobBucketDTO { public string Id { get; set; } = string.Empty; public string Label { get; set; } = string.Empty; } public class VendorFacetsDTO { public IEnumerable Companies { get; set; } = Enumerable.Empty(); public IEnumerable Trades { get; set; } = Enumerable.Empty(); public IEnumerable Areas { get; set; } = Enumerable.Empty(); public IEnumerable Locations { get; set; } = Enumerable.Empty(); public IEnumerable JobBuckets { get; set; } = Enumerable.Empty(); } // SH-278: one active Area option. Id is the stable areas[n] filter value. public class VendorFacetAreaDTO { public int Id { get; set; } public string Name { get; set; } = string.Empty; } // SH-278: wire values accepted by the vendor directory areas[n] filter besides ids. public static class VendorAreaFilterValues { public const string Unassigned = "__unassigned__"; } }