// // InternalDevelopmentNotificationsView.swift // CodeEdit // // Created by Austin Condiff on 2/19/24. // import SwiftUI struct InternalDevelopmentNotificationsView: View { enum IconType: String, CaseIterable { case symbol = "Symbol" case image = "Image" case text = "Text" case emoji = "Emoji" } @State private var delay: Bool = false @State private var sticky: Bool = false @State private var selectedIconType: IconType = .symbol @State private var actionButtonText: String = "View" @State private var notificationTitle: String = "Test Notification" @State private var notificationDescription: String = "This is a test notification." // Icon selection states @State private var selectedSymbol: String? @State private var selectedEmoji: String? @State private var selectedText: String? @State private var selectedImage: String? @State private var selectedColor: Color? private let availableSymbols = [ "bell.fill", "bell.badge.fill", "exclamationmark.triangle.fill", "info.circle.fill", "checkmark.seal.fill", "xmark.octagon.fill", "bubble.left.fill", "envelope.fill", "phone.fill", "megaphone.fill", "clock.fill", "calendar", "flag.fill", "bookmark.fill", "bolt.fill", "shield.lefthalf.fill", "gift.fill", "heart.fill", "star.fill", "curlybraces" ] private let availableEmojis = [ "🔔", "🚨", "⚠️", "👋", "😍", "😎", "😘", "😜", "😝", "😀", "😁", "😂", "🤣", "😃", "😄", "😅", "😆", "😇", "😉", "😊", "😋", "😌" ] private let availableImages = [ "GitHubIcon", "BitBucketIcon", "GitLabIcon" ] private let availableColors: [(String, Color)] = [ ("Red", .red), ("Orange", .orange), ("Yellow", .yellow), ("Green", .green), ("Mint", .mint), ("Cyan", .cyan), ("Teal", .teal), ("Blue", .blue), ("Indigo", .indigo), ("Purple", .purple), ("Pink", .pink), ("Gray", .gray) ] var body: some View { Section("Notifications") { Toggle("Delay 5s", isOn: $delay) Toggle("Sticky", isOn: $sticky) Picker("Icon Type", selection: $selectedIconType) { ForEach(IconType.allCases, id: \.self) { type in Text(type.rawValue).tag(type) } } Group { switch selectedIconType { case .symbol: Picker("Symbol", selection: $selectedSymbol) { Label("Random", systemImage: "dice").tag(nil as String?) Divider() ForEach(availableSymbols, id: \.self) { symbol in Label(symbol, systemImage: symbol).tag(symbol as String?) } } case .emoji: Picker("Emoji", selection: $selectedEmoji) { Label("Random", systemImage: "dice").tag(nil as String?) Divider() ForEach(availableEmojis, id: \.self) { emoji in Text(emoji).tag(emoji as String?) } } case .text: Picker("Text", selection: $selectedText) { Label("Random", systemImage: "dice").tag(nil as String?) Divider() ForEach("ABCDEFGHIJKLMNOPQRSTUVWXYZ".map { String($0) }, id: \.self) { letter in Text(letter).tag(letter as String?) } } case .image: Picker("Image", selection: $selectedImage) { Label("Random", systemImage: "dice").tag(nil as String?) Divider() ForEach(availableImages, id: \.self) { image in Text(image).tag(image as String?) } } } if selectedIconType == .symbol || selectedIconType == .text || selectedIconType == .emoji { Picker("Icon Color", selection: $selectedColor) { Label("Random", systemImage: "dice").tag(nil as Color?) Divider() ForEach(availableColors, id: \.0) { name, color in HStack { Circle() .fill(color) .frame(width: 12, height: 12) Text(name) }.tag(color as Color?) } } } } TextField("Title", text: $notificationTitle) TextField("Description", text: $notificationDescription, axis: .vertical) .lineLimit(1...5) TextField("Action Button", text: $actionButtonText) Button("Add Notification") { let action = { switch selectedIconType { case .symbol: let iconSymbol = selectedSymbol ?? availableSymbols.randomElement() ?? "bell.fill" let iconColor = selectedColor ?? availableColors.randomElement()?.1 ?? .blue NotificationManager.shared.post( iconSymbol: iconSymbol, iconColor: iconColor, title: notificationTitle, description: notificationDescription, actionButtonTitle: actionButtonText, action: { print("Test notification action triggered") }, isSticky: sticky ) case .image: let imageName = selectedImage ?? availableImages.randomElement() ?? "GitHubIcon" NotificationManager.shared.post( iconImage: Image(imageName), title: notificationTitle, description: notificationDescription, actionButtonTitle: actionButtonText, action: { print("Test notification action triggered") }, isSticky: sticky ) case .text: let text = selectedText ?? randomLetter() let iconColor = selectedColor ?? availableColors.randomElement()?.1 ?? .blue NotificationManager.shared.post( iconText: text, iconTextColor: .white, iconColor: iconColor, title: notificationTitle, description: notificationDescription, actionButtonTitle: actionButtonText, action: { print("Test notification action triggered") }, isSticky: sticky ) case .emoji: let emoji = selectedEmoji ?? availableEmojis.randomElement() ?? "🔔" let iconColor = selectedColor ?? availableColors.randomElement()?.1 ?? .blue NotificationManager.shared.post( iconText: emoji, iconTextColor: .white, iconColor: iconColor, title: notificationTitle, description: notificationDescription, actionButtonTitle: actionButtonText, action: { print("Test notification action triggered") }, isSticky: sticky ) } } if delay { DispatchQueue.main.asyncAfter(deadline: .now() + 5) { action() } } else { action() } } } } private func randomLetter() -> String { let letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".map { String($0) } return letters.randomElement() ?? "A" } }