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

import SwiftUI

struct ThemePickerView: View {
    @Environment(\.colorScheme) var colorScheme

    @State private var selectedTheme: Theme = UserDefaultsStore.theme()

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

    var body: some View {
        VStack {
            HStack(spacing: 0) {
                themeButton(for: .system)
                themeButton(for: .iFeel)
                themeButton(for: .dark)
                themeButton(for: .light)
            }
            .padding(.top)
        }
        .padding()
        .background(selectedTheme.currentTheme.secondaryBGColor)
        .fixedSize(horizontal: false, vertical: true)
        .cornerRadius(Constants.viewsCornerRaidus, corners: [.topLeft, .topRight, .bottomLeft, .bottomRight])
        .onAppear {
            selectedTheme = UserDefaultsStore.theme()
        }
    }

    @ViewBuilder
    private func themeButton(for theme: Theme) -> some View {
        Button {
            selectTheme(theme)
        } label: {
            VStack {
                theme.currentTheme.preview
                    .allowsHitTesting(false)
                    .overlay(
                        Circle()
                            .stroke(Color(UIColor.systemGray), style: StrokeStyle(lineWidth: 2))
                    )
                Text(theme.title)
                    .foregroundColor(textColor)
                    .font(.body)
            }
            .frame(maxWidth: .infinity)
            .contentShape(Rectangle())
        }
        .buttonStyle(.plain)
        .background(
            RoundedRectangle(cornerRadius: 10, style: .continuous)
                .fill(selectedTheme == theme ? selectedTheme.currentTheme.bgColor : .clear)
                .padding(-5)
        )
    }

    private func selectTheme(_ theme: Theme) {
        // Save theme value
        GroupUserDefaults.groupDefaults.set(theme.rawValue, forKey: UserDefaultsStore.Keys.theme.rawValue)
        GroupUserDefaults.groupDefaults.synchronize()

        withAnimation(.easeInOut(duration: 0.2)) {
            selectedTheme = theme
        }

        AnalyticsManager.shared.track(.themeChanged(themeId: theme.rawValue))
    }
}

struct ThemePickerView_Previews: PreviewProvider {
    static var previews: some View {
        ThemePickerView()
    }
}
