//
//  AccountsPreferencesView.swift
//  macOS
//
//  Created by Stuart Breckenridge on 27/6/20.
//

import SwiftUI

struct AccountPreferencesViewModel {
    let accountTypes = ["On My Mac", "FeedBin"]
    var selectedAccount = Int?.none
}

struct AccountsPreferencesView: View {
   
    @State private var viewModel = AccountPreferencesViewModel()
    @State private var addAccountViewModel = AccountPreferencesViewModel()
    @State private var showAddAccountView: Bool = false
    
    var body: some View {
        VStack {
            HStack(alignment: .top, spacing: 10) {
                VStack(alignment: .leading) {
                    List(selection: $viewModel.selectedAccount, content: {
                        ForEach(0..<viewModel.accountTypes.count, content: { i in
                            AccountDetailRow(imageName: "desktopcomputer", accountName: viewModel.accountTypes[i]).padding(.vertical, 8)
                        })
                    })
                    HStack {
                        Button("+", action: {
                            showAddAccountView.toggle()
                        })
                        Button("-", action: {})
                            .disabled(viewModel.selectedAccount == nil)
                        Spacer()
                    }
                }.frame(width: 225, height: 300, alignment: .leading)
                VStack(alignment: .leading) {
                    viewModel.selectedAccount == nil ? Text("Select Account") : Text(viewModel.accountTypes[viewModel.selectedAccount!])
                    Spacer()
                }.frame(width: 225, height: 300, alignment: .leading)
            }
            Spacer()
        }.sheet(isPresented: $showAddAccountView,
                onDismiss: { showAddAccountView.toggle() },
                content: {
                    AddAccountView()
        })
    }
    
}

struct AccountDetailRow: View {
    
    var imageName: String
    var accountName: String
    
    var body: some View {
        HStack {
            Image(systemName: imageName).font(.headline)
            Text(accountName).font(.headline)
        }
    }
    
}

struct AddAccountView: View {
    
    @Environment(\.presentationMode) var presentationMode
    let accountTypes = ["On My Mac", "FeedBin"]
    @State var selectedAccount: Int = 0
    @State private var userName: String = ""
    @State private var password: String = ""

    var body: some View {
        
        VStack(alignment: .leading) {
            Text("Add an Account").font(.headline)
            Form {
                Picker("Account Type",
                       selection: $selectedAccount,
                       content: {
                            ForEach(0..<accountTypes.count, content: {
                                AccountDetailRow(imageName: "desktopcomputer", accountName: accountTypes[$0])
                            })
                       })
                
                if selectedAccount == 1 {
                    TextField("Email", text: $userName)
                    SecureField("Password", text: $password)
                }
            }
            Spacer()
            HStack {
                Spacer()
                
                
                Button(action: { presentationMode.wrappedValue.dismiss() }, label: {
                    Text("Cancel")
                })
                
                if selectedAccount == 0 {
                    Button("Add", action: {})
                }
                
                if selectedAccount != 0 {
                    Button("Create", action: {})
                        .disabled(userName.count == 0 || password.count == 0)
                }
                
                
            }
        }.frame(width: 300, alignment: .top).padding()
        
    }
    
}


class AddAccountModel: ObservableObject {
    let accountTypes = ["On My Mac", "FeedBin"]
    @Published var selectedAccount = Int?.none
}