import SwiftUI

struct SettingsView: View {
    @ObservedObject var viewModel: LoginViewModel
    @EnvironmentObject private var themeManager: ThemeManager
    @State private var isThemeExpanded = false
    @State private var isSecurityActive = false
    private let themeOptions = ThemeOption.ordered

    private var selectedThemeOption: ThemeOption {
        ThemeOption.option(for: themeManager.theme)
    }

    var body: some View {
        Form {
            if shouldShowLegacySupportBanner {
                LegacySupportBanner()
                    .listRowInsets(EdgeInsets(top: 12, leading: 0, bottom: 4, trailing: 0))
                    .listRowBackground(Color.clear)
            }

            // MARK: - Профиль
            Section(header: Text(NSLocalizedString("Профиль", comment: ""))) {
//                NavigationLink(destination: EditProfileView()) {
//                    Label("Мой профиль", systemImage: "person.crop.circle")
//                }
                
                NavigationLink(destination: EditProfileView()) {
                    Label(NSLocalizedString("Редактировать профиль", comment: ""), systemImage: "person.crop.circle")
                }
                
                NavigationLink(destination: BlockedUsersView()) {
                    Label(NSLocalizedString("Чёрный список", comment: ""), systemImage: "hand.raised.fill")
                }
            }

            // MARK: - Безопасность
            Section(header: Text(NSLocalizedString("Безопасность", comment: ""))) {
                NavigationLink(destination: EditPrivacyView()) {
                    Label(NSLocalizedString("Конфиденциальность", comment: ""), systemImage: "lock.fill")
                }

                NavigationLink(destination: ChangePasswordView()) {
                    Label(NSLocalizedString("Сменить пароль", comment: ""), systemImage: "key")
                }
                NavigationLink(destination: ActiveSessionsView()) {
                    Label(NSLocalizedString("Активные сессии", comment: ""), systemImage: "iphone")
                }
                NavigationLink(isActive: $isSecurityActive) {
                    SecuritySettingsView(viewModel: viewModel)
                } label: {
                    Label(NSLocalizedString("Безопасность", comment: ""), systemImage: "lock.shield")
                }
            }

            // MARK: - Приложение
            Section(header: Text("Приложение")) {
                Button(action: openLanguageSettings) {
                    Label("Язык", systemImage: "globe")
                }

                DisclosureGroup(isExpanded: $isThemeExpanded) {
                    VStack(alignment: .leading, spacing: 12) {
                        ForEach(Array(themeOptions.enumerated()), id: \.element.id) { index, option in
                            themeRow(for: option)
                            if index < themeOptions.count - 1 {
                                Divider()
                            }
                        }
                    }
                    .padding(.vertical, 4)
                } label: {
                    Label("Темы", systemImage: "moon.fill")
                }

                NavigationLink(destination: DataSettingsView(currentUserId: viewModel.userId)) {
                    Label("Данные", systemImage: "externaldrive")
                }

                NavigationLink(destination: OtherSettingsView()) {
                    Label("Другое", systemImage: "ellipsis.circle")
                }
            }

            // MARK: - Уведомления
            Section(header: Text("Уведомления")) {
                NavigationLink(destination: Text("Заглушка: Push-уведомления")) {
                    Label("Push-уведомления", systemImage: "bell")
                }
            }

            // MARK: - Поддержка
            Section(header: Text("Поддержка")) {
                NavigationLink(destination: FAQView()) {
                    Label("Частые вопросы", systemImage: "questionmark.circle")
                }
                NavigationLink(destination: FeedbackView()) {
                    Label("Обратная связь", systemImage: "paperplane")
                }
            }

            // MARK: - О приложении
//            Section(header: Text("О приложении")) {
//                VStack(alignment: .leading, spacing: 6) {
//                    Text(AppInfo.text_1)
//                    Text(AppInfo.text_2)
//                    Text(AppInfo.text_3)
//                }
//                .font(.footnote)
//                .foregroundColor(.gray)
//                .padding(.vertical, 4)
//            }
            
            Section(header: Text(NSLocalizedString("О приложении", comment: ""))) {
                VStack(alignment: .leading, spacing: 6) {
                    Text(
                        "\(NSLocalizedString("Версия:", comment: "")) \(Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "")")
                    Text(
                        "\(NSLocalizedString("Сборка:", comment: "")) \(Bundle.main.infoDictionary?["CFBundleVersion"] as? String ?? "")")
                    Text("© 2025 Yobble Org. \(NSLocalizedString("Все права защищены.", comment: ""))")
                }
                .font(.footnote)
                .foregroundColor(.gray)
                .padding(.vertical, 4)
            }

            // MARK: - Выход
            Section {
                Button(action: {
                    viewModel.logoutCurrentUser()
                }) {
                    HStack {
                        Image(systemName: "arrow.backward.square")
                        Text("Выйти из аккаунта")
                    }
                    .foregroundColor(.red)
                }
            }
        }
        .navigationTitle("Настройки")
    }
    
    private func openLanguageSettings() {
        guard let url = URL(string: UIApplication.openSettingsURLString) else { return }
        UIApplication.shared.open(url)
    }

    private func themeRow(for option: ThemeOption) -> some View {
        let isSelected = option == selectedThemeOption

        return Button(action: {
            selectTheme(option)
        }) {
            HStack(spacing: 12) {
                Image(systemName: isSelected ? "checkmark.circle.fill" : "circle")
                    .foregroundColor(isSelected ? .accentColor : .secondary)
                VStack(alignment: .leading, spacing: 2) {
                    Text(option.title)
                        .foregroundColor(.primary)
                    if let note = option.note {
                        Text(note)
                            .font(.caption)
                            .foregroundColor(.secondary)
                    }
                }
                Spacer()
            }
            .contentShape(Rectangle())
        }
        .disabled(!option.isEnabled)
        .opacity(option.isEnabled ? 1.0 : 0.5)
        .buttonStyle(.plain)
    }

    private func selectTheme(_ option: ThemeOption) {
        guard let mappedTheme = option.mappedTheme else { return }
        themeManager.setTheme(mappedTheme)
    }

    private var shouldShowLegacySupportBanner: Bool {
#if os(iOS)
        let requiredVersion = OperatingSystemVersion(majorVersion: 16, minorVersion: 0, patchVersion: 0)
        return !ProcessInfo.processInfo.isOperatingSystemAtLeast(requiredVersion)
#else
        return false
#endif
    }
}

private struct LegacySupportBanner: View {
    var body: some View {
        HStack(alignment: .top, spacing: 12) {
            Image(systemName: "exclamationmark.triangle.fill")
                .font(.system(size: 24, weight: .semibold))
                .foregroundColor(.yellow)

            VStack(alignment: .leading, spacing: 4) {
                Text("Экспериментальная поддержка iOS 15")
                    .font(.headline)
                Text("Поддержка iOS 15 работает в экспериментальном режиме. Для лучшей совместимости требуется iOS 16+.")
                    .font(.subheadline)
                    .foregroundColor(.secondary)
            }

            Spacer(minLength: 0)
        }
        .padding(16)
        .background(
            RoundedRectangle(cornerRadius: 14, style: .continuous)
                .fill(Color.yellow.opacity(0.15))
        )
        .overlay(
            RoundedRectangle(cornerRadius: 14, style: .continuous)
                .stroke(Color.yellow.opacity(0.4), lineWidth: 1)
        )
    }
}
