//
//  LoginView.swift
//  WekoutThotViewer
//
//  Created by Trey Tartt on 6/18/24.
//

import SwiftUI

struct LoginView: View {
    @State var email: String = ""
    @State var password: String = ""
    @Environment(\.dismiss) var dismiss
    let completion: (() -> Void)
    @State var doingNetworkShit: Bool = false
    
    @State var errorTitle = ""
    @State var errorMessage = ""
    @State var hasError: Bool = false
    
    
    var body: some View {
        VStack {
            TextField("Email", text: $email)
                .textContentType(.username)
                .autocapitalization(.none)
                .padding()
                .background(Color.white)
                .cornerRadius(8)
                .padding(.horizontal)
                .padding(.top, 25)
                .foregroundStyle(.black)
            
            SecureField("Password", text: $password)
                .textContentType(.password)
                .padding()
                .background(Color.white)
                .cornerRadius(8)
                .padding(.horizontal)
                .autocapitalization(.none)
                .foregroundStyle(.black)
            
            if doingNetworkShit {
                ProgressView("Logging In")
                    .padding()
                    .foregroundColor(.white)
                    .progressViewStyle(CircularProgressViewStyle(tint: .white))
                    .scaleEffect(1.5, anchor: .center)
            } else {
                Button("Login", action: {
                    login()
                })
                .frame(maxWidth: .infinity, alignment: .center)
                .frame(height: 44)
                .foregroundColor(.blue)
                .background(.yellow)
                .cornerRadius(Constants.buttonRadius)
                .padding()
                .frame(maxWidth: .infinity)
                .disabled(password.isEmpty || email.isEmpty)
            }
            
            Spacer()
        }
        .padding()
        .background(
            Image("icon")
                .resizable()
                .edgesIgnoringSafeArea(.all)
                .scaledToFill()
        )
        .alert(errorTitle, isPresented: $hasError, actions: {
            
        }, message: {
            
        })
    }
    
    func login() {
        let postData = [
            "email": email,
            "password": password
        ]
        doingNetworkShit = true
        UserStore.shared.login(postData: postData, completion: { success in
            doingNetworkShit = false
            if success {
                completion()
                dismiss()
            } else {
                errorTitle = "error logging in"
                errorMessage = "invalid credentials"
                hasError = true
            }
        })
    }
}

struct LoginView_Previews: PreviewProvider {
    static var previews: some View {
        LoginView(completion: {
            
        })
    }
}

