104 lines
3.4 KiB
Swift
104 lines
3.4 KiB
Swift
//
|
||
// LoginViewModel.swift
|
||
// VolnahubApp
|
||
//
|
||
// Created by cheykrym on 09/06/2025.
|
||
//
|
||
|
||
import Foundation
|
||
import Combine
|
||
|
||
class LoginViewModel: ObservableObject {
|
||
@Published var username: String = ""
|
||
@Published var password: String = ""
|
||
@Published var isLoading: Bool = true // сразу true, чтобы показать спиннер при автологине
|
||
@Published var showError: Bool = false
|
||
@Published var errorMessage: String = ""
|
||
@Published var isLoggedIn: Bool = false
|
||
|
||
private let authService = AuthService()
|
||
|
||
init() {
|
||
// Если username сохранён, подставим его сразу
|
||
if let savedUsername = UserDefaults.standard.string(forKey: "currentUser") {
|
||
username = savedUsername
|
||
}
|
||
|
||
// Запускаем автологин
|
||
autoLogin()
|
||
}
|
||
|
||
func autoLogin() {
|
||
authService.autoLogin { [weak self] success, error in
|
||
DispatchQueue.main.async {
|
||
// self?.isLoading = false
|
||
if success {
|
||
self?.isLoggedIn = true
|
||
} else {
|
||
self?.isLoggedIn = false
|
||
self?.errorMessage = error ?? NSLocalizedString("Произошла ошибка.", comment: "")
|
||
self?.showError = false
|
||
}
|
||
self?.isLoading = false
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
func login() {
|
||
isLoading = true
|
||
showError = false
|
||
|
||
authService.login(username: username, password: password) { [weak self] success, error in
|
||
DispatchQueue.main.async {
|
||
self?.isLoading = false
|
||
if success {
|
||
self?.isLoggedIn = true
|
||
} else {
|
||
self?.errorMessage = error ?? NSLocalizedString("Неизвестная ошибка", comment: "")
|
||
self?.showError = true
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
func registerUser(username: String, password: String, invite: String?, completion: @escaping (Bool, String?) -> Void) {
|
||
authService.register(username: username, password: password, invite: invite) { [weak self] success, message in
|
||
DispatchQueue.main.async {
|
||
if success {
|
||
self?.isLoggedIn = true // 👈 переключаем на главный экран после автологина
|
||
}
|
||
completion(success, message)
|
||
}
|
||
}
|
||
}
|
||
|
||
func logoutCurrentUser() {
|
||
authService.logoutCurrentUser { [weak self] success, error in
|
||
DispatchQueue.main.async {
|
||
if success {
|
||
self?.username = UserDefaults.standard.string(forKey: "currentUser") ?? ""
|
||
self?.password = ""
|
||
self?.isLoggedIn = true
|
||
self?.showError = false
|
||
} else {
|
||
self?.username = ""
|
||
self?.password = ""
|
||
self?.isLoggedIn = false
|
||
self?.errorMessage = error ?? NSLocalizedString("Ошибка при деавторизации.", comment: "")
|
||
self?.showError = false
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
// func logout() {
|
||
// username = ""
|
||
// password = ""
|
||
// isLoggedIn = false
|
||
// showError = false
|
||
// errorMessage = ""
|
||
// }
|
||
}
|