import Foundation /// Presentation-only notices derived from existing station metadata. /// /// These do not alter `FuelStation`, persistence, filtering, sorting, or /// navigation. They are intentionally small and reusable so additional /// informational station notices can be added later from the UI layer. enum StationNotice: Identifiable, Equatable { case membershipRequired var id: String { switch self { case .membershipRequired: return "membershipRequired" } } var title: String { switch self { case .membershipRequired: return "Membership required" } } var symbolName: String { switch self { case .membershipRequired: return "creditcard.fill" } } static func notices(for station: FuelStation) -> [StationNotice] { isCostco(station) ? [.membershipRequired] : [] } static func isCostco(_ station: FuelStation) -> Bool { containsCostcoToken(station.brand) || containsCostcoToken(station.name) } private static func containsCostcoToken(_ value: String) -> Bool { let tokens = value.uppercased().split { !$0.isLetter && !$0.isNumber } return tokens.contains("COSTCO") } }