Yoloabdo
11/2/2018 - 5:03 PM

verifying user inputs in Login/register view controllers

verifying user inputs in Login/register view controllers

//: A UIKit based Playground for presenting user interface
  
import UIKit
import PlaygroundSupport


var usernameTextfield = UITextField()
var userPasswordTextfield = UITextField()


func userTappedBtn(sender: UIButton) {
   
    // verify
    // call api
    // handle response for api
    
    
}

func verifyUserInputs() {
    do {
        let username = try verifyInput(username: usernameTextfield)
        let password = try verifyInput(email: usernameTextfield)
        
        // call api
        
        callAPi(username: username, password: password, completion: handleApiResponse)
        
    }catch {
        guard let error = error as? LoginError else {
            return
        }
        
        showError(error)
    }
}

func handleApiResponse(results: Bool) {
    // segue
    // show error if there's any
}


func showError(_ error: LoginError) {
//    showAlert(error.localizedDescription)
}

enum LoginError: LocalizedError {
    case usernameEmpty, usernameCount, emailIsEmpty
    
    var localizedDescription: String {
        switch self {
        case .usernameEmpty:
            return "من فضلك اسم المستخدم"
        case .usernameCount:
            return "عدد حروف اسم المستخدم اقل من المسموح به"
        case .emailIsEmpty:
            return "لا بد من إدخال البريد الإلكتروني"
        }
    }
}


func verifyInput(username: UITextField) throws -> String {
    guard username.hasText else {
        throw LoginError.usernameEmpty
    }
    
    guard let user = username.text, user.count > 5 else {
        throw LoginError.usernameCount
    }
    
    return user
}

func verifyInput(email: UITextField) throws -> String {
    guard email.hasText else {
        throw LoginError.emailIsEmpty
    }
    
    guard let emailText = email.text, emailText.isEmail else {
        throw LoginError.usernameCount
    }
    
    return emailText
}


extension String {
    var isEmail: Bool {
        return true
    }
}


func callAPi(username: String, password: String, completion: (Bool) -> Void) {
    
}