import AppAccount
import DesignSystem
import Env
import Models
import Network
import NukeUI
import SwiftUI
import UserNotifications

struct ContentSettingsView: View {
  @EnvironmentObject private var userPreferences: UserPreferences
  @EnvironmentObject private var theme: Theme

  var body: some View {
    Form {
      Section("settings.content.boosts") {
        Toggle(isOn: $userPreferences.suppressDupeReblogs) {
          Text("settings.content.hide-repeated-boosts")
        }
      }.listRowBackground(theme.primaryBackgroundColor)

      Section("settings.content.media") {
        Toggle(isOn: $userPreferences.showAltTextForMedia) {
          Text("settings.content.media.show.alt")
        }
      }.listRowBackground(theme.primaryBackgroundColor)

      Section("settings.content.instance-settings") {
        Toggle(isOn: $userPreferences.useInstanceContentSettings) {
          Text("settings.content.use-instance-settings")
        }
      }
      .listRowBackground(theme.primaryBackgroundColor)
      .onChange(of: userPreferences.useInstanceContentSettings) { newVal in
        if newVal {
          userPreferences.appAutoExpandSpoilers = userPreferences.autoExpandSpoilers
          userPreferences.appAutoExpandMedia = userPreferences.autoExpandMedia
          userPreferences.appDefaultPostsSensitive = userPreferences.postIsSensitive
          userPreferences.appDefaultPostVisibility = userPreferences.postVisibility
        }
      }

      Section("settings.content.reading") {
        Toggle(isOn: $userPreferences.appAutoExpandSpoilers) {
          Text("settings.content.expand-spoilers")
        }
        .disabled(userPreferences.useInstanceContentSettings)

        Picker("settings.content.expand-media", selection: $userPreferences.appAutoExpandMedia) {
          ForEach(ServerPreferences.AutoExpandMedia.allCases, id: \.rawValue) { media in
            Text(media.description).tag(media)
          }
        }
        .disabled(userPreferences.useInstanceContentSettings)
      }.listRowBackground(theme.primaryBackgroundColor)

      Section("settings.content.posting") {
        Picker("settings.content.default-visibility", selection: $userPreferences.appDefaultPostVisibility) {
          ForEach(Visibility.allCases, id: \.rawValue) { vis in
            Text(vis.title).tag(vis)
          }
        }
        .disabled(userPreferences.useInstanceContentSettings)

        Toggle(isOn: $userPreferences.appDefaultPostsSensitive) {
          Text("settings.content.default-sensitive")
        }
        .disabled(userPreferences.useInstanceContentSettings)
      }

      .listRowBackground(theme.primaryBackgroundColor)
    }
    .navigationTitle("settings.content.navigation-title")
    .scrollContentBackground(.hidden)
    .background(theme.secondaryBackgroundColor)
  }
}
