42 lines
1.2 KiB
Swift
42 lines
1.2 KiB
Swift
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")
|
|
}
|
|
}
|