import SwiftUI // MARK: - 输入组件工厂 struct InputComponentFactory { // 根据QR码类型返回相应的输入组件 static func createInputComponent( for qrCodeType: QRCodeType, content: Binding, emailAddress: Binding, emailSubject: Binding, emailBody: Binding, emailCc: Binding, emailBcc: Binding, focusedEmailField: FocusState, isContentFieldFocused: FocusState, ssid: Binding, password: Binding, encryptionType: Binding, focusedWiFiField: FocusState, firstName: Binding, lastName: Binding, phone: Binding, email: Binding, company: Binding, title: Binding, address: Binding, website: Binding, focusedContactField: FocusState, latitude: Binding, longitude: Binding, locationName: Binding, focusedLocationField: FocusState, eventTitle: Binding, eventDescription: Binding, startDate: Binding, endDate: Binding, location: Binding, focusedCalendarField: FocusState, username: Binding, message: Binding, focusedSocialField: FocusState, phoneNumber: Binding, phoneMessage: Binding, focusedPhoneField: FocusState, url: Binding, isUrlFieldFocused: FocusState ) -> AnyView { switch qrCodeType { case .mail: return AnyView( EmailInputView( emailAddress: emailAddress, emailSubject: emailSubject, emailBody: emailBody, emailCc: emailCc, emailBcc: emailBcc, focusedEmailField: focusedEmailField ) ) case .wifi: return AnyView( WiFiInputView( ssid: ssid, password: password, encryptionType: encryptionType, focusedField: focusedWiFiField ) ) case .vcard, .mecard: return AnyView( ContactInputView( firstName: firstName, lastName: lastName, phone: phone, email: email, company: company, title: title, address: address, website: website, focusedField: focusedContactField ) ) case .location: return AnyView( LocationInputView( latitude: latitude, longitude: longitude, locationName: locationName, focusedField: focusedLocationField ) ) case .calendar: return AnyView( CalendarInputView( eventTitle: eventTitle, eventDescription: eventDescription, startDate: startDate, endDate: endDate, location: location ) ) case .instagram, .facebook, .twitter, .tiktok, .snapchat, .whatsapp, .viber, .spotify: let platform = SocialInputView.SocialPlatform(rawValue: qrCodeType.rawValue.capitalized) ?? .instagram return AnyView( SocialInputView( username: username, message: message, platform: platform, focusedField: focusedSocialField ) ) case .phone, .sms: let inputType: PhoneInputView.PhoneInputType = qrCodeType == .phone ? .phone : .sms return AnyView( PhoneInputView( phoneNumber: phoneNumber, message: phoneMessage, inputType: inputType, focusedField: focusedPhoneField ) ) case .url: return AnyView( URLInputView( url: url, isUrlFieldFocused: isUrlFieldFocused ) ) default: // 默认使用通用文本输入组件 return AnyView( TextInputView( content: content, isContentFieldFocused: isContentFieldFocused, placeholder: getPlaceholderText(for: qrCodeType), maxCharacters: getMaxCharacters(for: qrCodeType) ) ) } } // 获取占位符文本 private static func getPlaceholderText(for qrCodeType: QRCodeType) -> String { switch qrCodeType { case .text: return "输入任意文本内容..." case .phone: return "输入电话号码..." case .sms: return "输入短信内容..." case .wifi: return "输入WiFi信息..." case .vcard: return "输入联系人信息..." case .mecard: return "输入联系人信息..." case .location: return "输入地理位置..." case .calendar: return "输入日历事件信息..." case .instagram: return "输入Instagram信息..." case .facebook: return "输入Facebook信息..." case .spotify: return "输入Spotify信息..." case .twitter: return "输入Twitter信息..." case .whatsapp: return "输入WhatsApp信息..." case .viber: return "输入Viber信息..." case .snapchat: return "输入Snapchat信息..." case .tiktok: return "输入TikTok信息..." case .mail: return "输入邮件内容..." case .url: return "输入网址..." } } // 获取最大字符数 private static func getMaxCharacters(for qrCodeType: QRCodeType) -> Int { switch qrCodeType { case .text: return 150 case .phone, .sms: return 100 case .wifi: return 200 case .vcard, .mecard: return 500 case .location: return 200 case .calendar: return 300 case .instagram, .facebook, .twitter, .tiktok, .snapchat, .whatsapp, .viber, .spotify: return 200 case .mail: return 1200 case .url: return 500 } } }