package com.notifyhub.viewer.ui import android.content.Intent import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.lifecycleScope import com.notifyhub.viewer.NotizViewerApp import com.notifyhub.viewer.R import com.notifyhub.viewer.data.AuthRepository import com.notifyhub.viewer.databinding.ActivityLoginBinding import com.notifyhub.viewer.util.deviceName import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext class LoginActivity : AppCompatActivity() { private lateinit var binding: ActivityLoginBinding private lateinit var app: NotizViewerApp private lateinit var repo: AuthRepository override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) app = application as NotizViewerApp repo = AuthRepository(app.api, app.preferences, deviceName()) binding = ActivityLoginBinding.inflate(layoutInflater) setContentView(binding.root) binding.signInButton.setOnClickListener { signIn() } } private fun signIn() { val login = binding.loginInput.text?.toString()?.trim().orEmpty() val password = binding.passwordInput.text?.toString().orEmpty() val companyNumber = binding.companyNumberInput.text?.toString()?.trim().orEmpty() if (login.isBlank() || password.isBlank() || companyNumber.isBlank()) { binding.statusText.text = getString(R.string.error_message, "All fields are required.") return } binding.signInButton.isEnabled = false binding.statusText.text = getString(R.string.signing_in) lifecycleScope.launch { val outcome = withContext(Dispatchers.IO) { repo.login(login, password, companyNumber) } binding.signInButton.isEnabled = true when (outcome) { is AuthRepository.LoginOutcome.Success -> { startActivity(Intent(this@LoginActivity, HomeActivity::class.java)) finish() } is AuthRepository.LoginOutcome.TwoFactorRequired -> { val intent = Intent(this@LoginActivity, TwoFactorActivity::class.java).apply { putExtra(TwoFactorActivity.EXTRA_CHALLENGE_ID, outcome.challengeId) putExtra(TwoFactorActivity.EXTRA_MESSAGE, outcome.message) } startActivity(intent) finish() } is AuthRepository.LoginOutcome.Failed -> { binding.statusText.text = outcome.message } } } } }