//
//  PersonalityPackPickerView.swift
//  Reflect (iOS)
//
//  Created by Trey Tartt on 4/2/22.
//

import SwiftUI

struct PersonalityPackPickerView: View {
    @AppStorage(UserDefaultsStore.Keys.theme.rawValue, store: GroupUserDefaults.groupDefaults) private var theme: Theme = .system
    @AppStorage(UserDefaultsStore.Keys.personalityPack.rawValue, store: GroupUserDefaults.groupDefaults) private var personalityPack: PersonalityPack = .Default
    @State private var showOver18Alert = false
    @AppStorage(UserDefaultsStore.Keys.showNSFW.rawValue, store: GroupUserDefaults.groupDefaults) private var showNSFW: Bool = false

    private var textColor: Color { theme.currentTheme.labelColor }

    var body: some View {
        VStack {
            ForEach(PersonalityPack.allCases, id: \.self) { aPack in
                VStack(spacing: 10) {
                    Text(String(aPack.title()))
                        .font(.body)
                        .foregroundColor(textColor)

                    Text(aPack.randomPushNotificationStrings().title)
                        .font(.body)
                        .foregroundColor(Color(UIColor.systemGray))
                    Text(aPack.randomPushNotificationStrings().body)
                        .font(.body)
                        .foregroundColor(Color(UIColor.systemGray))
                }
                .frame(minWidth: 0, maxWidth: .infinity)
                .padding()
                .contentShape(Rectangle())
                .background(
                    RoundedRectangle(cornerRadius: 10, style: .continuous)
                        .fill(personalityPack == aPack ? theme.currentTheme.bgColor : .clear)
                        .padding(5)
                )
                .onTapGesture {
                        let impactMed = UIImpactFeedbackGenerator(style: .heavy)
                        impactMed.impactOccurred()
                        personalityPack = aPack
                        AnalyticsManager.shared.track(.personalityPackChanged(packTitle: aPack.title()))
                        LocalNotification.rescheduleNotifiations()
//                        }
                }
//                    .blur(radius: aPack.rawValue == PersonalityPack.Rude.rawValue && !showNSFW ? 5 : 0)
                .alert(isPresented: $showOver18Alert) {
                    let primaryButton = Alert.Button.default(Text(String(localized: "customize_view_over18alert_ok"))) {
                        showNSFW = true
                    }
                    let secondaryButton = Alert.Button.cancel(Text(String(localized: "customize_view_over18alert_no"))) {
                        showNSFW = false
                    }
                    return Alert(title: Text(String(localized: "customize_view_over18alert_title")),
                                 message: Text(String(localized: "customize_view_over18alert_body")),
                                 primaryButton: primaryButton,
                                 secondaryButton: secondaryButton)
                }
                if aPack.rawValue != (PersonalityPack.allCases.sorted(by: { $0.rawValue > $1.rawValue }).first?.rawValue) ?? 0 {
                    Divider()
                }
            }

        }
        .background(theme.currentTheme.secondaryBGColor)
        .fixedSize(horizontal: false, vertical: true)
        .cornerRadius(Constants.viewsCornerRaidus, corners: [.topLeft, .topRight, .bottomLeft, .bottomRight])
    }
}

struct PersonalityPackPickerView_Previews: PreviewProvider {
    static var previews: some View {
        PersonalityPackPickerView()
    }
}
