import Foundation import UIKit enum NodeDisplayName { private static let genericNames: Set = ["iOS Node", "iPhone Node", "iPad Node"] static func isGeneric(_ name: String) -> Bool { Self.genericNames.contains(name) } static func defaultValue(for interfaceIdiom: UIUserInterfaceIdiom) -> String { switch interfaceIdiom { case .phone: return "iPhone Node" case .pad: return "iPad Node" default: return "iOS Node" } } static func resolve( existing: String?, deviceName: String, interfaceIdiom: UIUserInterfaceIdiom ) -> String { let trimmedExisting = existing?.trimmingCharacters(in: .whitespacesAndNewlines) ?? "" if !trimmedExisting.isEmpty, !Self.isGeneric(trimmedExisting) { return trimmedExisting } let trimmedDevice = deviceName.trimmingCharacters(in: .whitespacesAndNewlines) if let normalized = Self.normalizedDeviceName(trimmedDevice) { return normalized } return Self.defaultValue(for: interfaceIdiom) } private static func normalizedDeviceName(_ deviceName: String) -> String? { guard !deviceName.isEmpty else { return nil } let lower = deviceName.lowercased() if lower.contains("iphone") || lower.contains("ipad") || lower.contains("ios") { return deviceName } return nil } }