// // EQNData.swift // Earthquake Network // // Created by Busi Andrea on 26/08/2020. // Copyright © 2020 Earthquake Network. All rights reserved. // import Foundation @objc class EQNData: NSObject { @objc public static let DefaultRaggioSisma = EQNGenericValue(value:"100000", display:"Qualsiasi distanza") @objc public static let DefaultMagitudoDebole = EQNGenericValue(value:"2.0", display:"Magnitudo >= 2.0") @objc public static let DefaultMagitudoForte = EQNGenericValue(value:"5.5", display:"Magnitudo >= 5.5") @objc public static let DefaultSeismicToNotify = EQNGenericValue(value: "0", display: "Qualsiasi intensità") @objc public static let DefaultDoNotDisturbStartTime = 8 @objc public static let DefaultDoNotDisturbEndTime = 22 @objc public static let DefaultPeriodoTemporale = EQNGenericValue(value: "1440", display: "Un giorno") // MARK: - Public @objc class func raggioSismi() -> [EQNGenericValue] { [ EQNGenericValue(value:"50", display:"50 km"), EQNGenericValue(value:"100", display:"100 km"), EQNGenericValue(value:"200", display:"200 km"), EQNGenericValue(value:"300", display:"300 km"), EQNGenericValue(value:"400", display:"400 km"), EQNGenericValue(value:"500", display:"500 km"), EQNGenericValue(value:"600", display:"600 km"), EQNGenericValue(value:"800", display:"800 km"), EQNGenericValue(value:"1000", display:"1000 km"), EQNGenericValue(value:"2000", display:"2000 km"), EQNGenericValue(value:"4000", display:"4000 km"), EQNGenericValue(value:"100000", display:"Qualsiasi distanza"), ] } /// Returns the EQNGenericValue for the given value, or the default one /// - Parameter value: Sisma value to search /// - Returns: Found value or default @objc class func raggioSisma(for value: String?) -> EQNGenericValue { if let value = value, let genericValue = Self.raggioSismi().first(where: { $0.value == value }) { return genericValue } return Self.DefaultRaggioSisma } @objc class func magitudoDeboli() -> [EQNGenericValue] { [ EQNGenericValue(value:"0.0", display:"Magnitudo >= 0.0"), EQNGenericValue(value:"0.5", display:"Magnitudo >= 0.5"), EQNGenericValue(value:"1.0", display:"Magnitudo >= 1.0"), EQNGenericValue(value:"1.5", display:"Magnitudo >= 1.5"), EQNGenericValue(value:"2.0", display:"Magnitudo >= 2.0"), EQNGenericValue(value:"2.5", display:"Magnitudo >= 2.5"), EQNGenericValue(value:"3.0", display:"Magnitudo >= 3.0"), EQNGenericValue(value:"3.5", display:"Magnitudo >= 3.5"), EQNGenericValue(value:"4.0", display:"Magnitudo >= 4.0"), EQNGenericValue(value:"4.5", display:"Magnitudo >= 4.5"), EQNGenericValue(value:"5.0", display:"Magnitudo >= 5.0"), EQNGenericValue(value:"5.5", display:"Magnitudo >= 5.5") ] } /// Returns the EQNGenericValue for the given value, or the default one /// - Parameter value: Magnitudo value to search /// - Returns: Found value or default @objc class func magitudoDebole(for value: String?) -> EQNGenericValue { if let value = value, let genericValue = Self.magitudoDeboli().first(where: { $0.value == value }) { return genericValue } return Self.DefaultMagitudoDebole } @objc class func magitudoForti() -> [EQNGenericValue] { [ EQNGenericValue(value:"5.5", display:"Magnitudo >= 5.5"), EQNGenericValue(value:"6.0", display:"Magnitudo >= 6.0"), EQNGenericValue(value:"6.5", display:"Magnitudo >= 6.5"), EQNGenericValue(value:"7.0", display:"Magnitudo >= 7.0"), EQNGenericValue(value:"7.5", display:"Magnitudo >= 7.5") ] } /// Returns the EQNGenericValue for the given value, or the default one /// - Parameter value: Magnitudo value to search /// - Returns: Found value or default @objc class func magitudoForte(for value: String?) -> EQNGenericValue { if let value = value, let genericValue = Self.magitudoForti().first(where: { $0.value == value }) { return genericValue } return Self.DefaultMagitudoForte } @objc class func seismicNetworks() -> [EQNSeismicNetwork] { [ EQNSeismicNetwork(acronym: "USGS", country: NSLocalizedString("Stati Uniti", comment: ""), extended: ""), EQNSeismicNetwork(acronym: "INGV", country: NSLocalizedString("Italia", comment: ""), extended: ""), EQNSeismicNetwork(acronym: "IGN", country: NSLocalizedString("Spagna", comment: ""), extended: ""), EQNSeismicNetwork(acronym: "CSI", country: NSLocalizedString("Cina", comment: ""), extended: ""), EQNSeismicNetwork(acronym: "JMA", country: NSLocalizedString("Giappone", comment: ""), extended: ""), EQNSeismicNetwork(acronym: "Ineter", country: NSLocalizedString("Nicaragua", comment: ""), extended: ""), EQNSeismicNetwork(acronym: "SSN", country: NSLocalizedString("Messico", comment: ""), extended: ""), EQNSeismicNetwork(acronym: "SGC", country: NSLocalizedString("Colombia", comment: ""), extended: ""), EQNSeismicNetwork(acronym: "RSN", country: NSLocalizedString("Costa Rica", comment: ""), extended: ""), EQNSeismicNetwork(acronym: "CSN", country: NSLocalizedString("Cile", comment: ""), extended: ""), EQNSeismicNetwork(acronym: "FUNVISIS", country: NSLocalizedString("Venezuela", comment: ""), extended: ""), EQNSeismicNetwork(acronym: "GeoNet", country: NSLocalizedString("Nuova Zelanda", comment: ""), extended: ""), EQNSeismicNetwork(acronym: "INPRES", country: NSLocalizedString("Argentina", comment: ""), extended: ""), EQNSeismicNetwork(acronym: "IGEPN", country: NSLocalizedString("Ecuador", comment: ""), extended: ""), EQNSeismicNetwork(acronym: "IGP", country: NSLocalizedString("Perù", comment: ""), extended: ""), EQNSeismicNetwork(acronym: "UASD", country: NSLocalizedString("Repubblica Dominicana", comment: ""), extended: ""), EQNSeismicNetwork(acronym: "EMSC", country: NSLocalizedString("Altro", comment: ""), extended: "") ] } @objc class func seismicNetworkAcronyms() -> [String] { Self.seismicNetworks().map { $0.acronym } } @objc class func seismicNetworkCountries() -> [String] { Self.seismicNetworks().map { $0.country } } @objc class func seismic(for acronym: String?) -> EQNSeismicNetwork? { guard let acronym = acronym else { return nil } return Self.seismicNetworks().first(where: { $0.acronym == acronym }) } @objc class func seismicToNotify() -> [EQNGenericValue] { [ EQNGenericValue(value:"0", display:"Qualsiasi intensità"), EQNGenericValue(value:"1", display:"Solo sismi forti") ] } @objc class func seismicToNotify(for value: String?) -> EQNGenericValue { if let value = value, let genericValue = Self.seismicToNotify().first(where: { $0.value == value }) { return genericValue } return Self.DefaultSeismicToNotify } @objc class func doNotDisturbStartDate(from date: Date?) -> Date { if let date = date { return date } // return default let calendar = Calendar(identifier: .gregorian) let units: Set = [.year, .month, .day, .hour, .minute] var components = calendar.dateComponents(units, from: Date()) components.hour = Self.DefaultDoNotDisturbStartTime components.minute = 00 return calendar.date(from: components)! } @objc class func doNotDisturbEndDate(from date: Date?) -> Date { if let date = date { return date } // return default let calendar = Calendar(identifier: .gregorian) let units: Set = [.year, .month, .day, .hour, .minute] var components = calendar.dateComponents(units, from: Date()) components.hour = Self.DefaultDoNotDisturbEndTime components.minute = 00 return calendar.date(from: components)! } @objc class func periodiTemporali() -> [EQNGenericValue] { [ EQNGenericValue(value: "10", display: "10 minuti"), EQNGenericValue(value: "60", display: "Un ora"), EQNGenericValue(value: "120", display: "Due ore"), EQNGenericValue(value: "360", display: "Sei ore"), EQNGenericValue(value: "720", display: "Dodici ore"), EQNGenericValue(value: "1440", display: "Un giorno") ] } /// Returns the EQNGenericValue for the given value, or the default one /// - Parameter value: Temporal unit value to search /// - Returns: Found value or default @objc class func periodoTemporale(for value: String?) -> EQNGenericValue { if let value = value, let genericValue = Self.periodiTemporali().first(where: { $0.value == value }) { return genericValue } return Self.DefaultPeriodoTemporale } }