package com.rit.whatsapp.handler; import com.rit.whatsapp.model.UserState; import com.rit.whatsapp.service.ImsApiService; import com.rit.whatsapp.service.SessionService; import com.rit.whatsapp.service.WhatsAppMessageService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component public class LoginHandler { private final WhatsAppMessageService messageService; private final SessionService sessionService; private final ImsApiService imsApiService; private final StudentMenuHandler studentMenuHandler; private final FacultyMenuHandler facultyMenuHandler; @Autowired public LoginHandler(WhatsAppMessageService messageService, SessionService sessionService, ImsApiService imsApiService, StudentMenuHandler studentMenuHandler, FacultyMenuHandler facultyMenuHandler) { this.messageService = messageService; this.sessionService = sessionService; this.imsApiService = imsApiService; this.studentMenuHandler = studentMenuHandler; this.facultyMenuHandler = facultyMenuHandler; } public void startLoginFlow(String phoneNumber) { sessionService.setUserState(phoneNumber, UserState.AWAITING_LOGIN_ID); messageService.sendMessage(phoneNumber, "Welcome to RIT Digital Assistant! 🎓\n\nPlease enter your IMS User ID to login:"); } public void handleLoginIdInput(String phoneNumber, String imsId) { sessionService.setTempLoginId(phoneNumber, imsId); sessionService.setUserState(phoneNumber, UserState.AWAITING_LOGIN_PASSCODE); messageService.sendMessage(phoneNumber, "Thanks. Now, please enter your IMS Passcode:"); } public void handlePasscodeInput(String phoneNumber, String passcode) { String imsId = sessionService.getTempLoginId(phoneNumber); messageService.sendMessage(phoneNumber, "Authenticating with IMS... ⏳"); ImsApiService.AuthResult result = imsApiService.authenticate(imsId, passcode); if (result != null && result.token != null) { // Authentication successful sessionService.authenticateUser(phoneNumber, imsId, passcode, result); sessionService.clearTempLoginId(phoneNumber); sessionService.resetState(phoneNumber); // Reset the flow state messageService.sendMessage(phoneNumber, "✅ Login Successful!"); // Show the main menu if (result.isFaculty) { facultyMenuHandler.sendMainMenu(phoneNumber); } else { studentMenuHandler.sendMainMenu(phoneNumber); } } else { // Authentication failed sessionService.clearTempLoginId(phoneNumber); sessionService.setUserState(phoneNumber, UserState.AWAITING_LOGIN_ID); messageService.sendMessage(phoneNumber, "❌ Login Failed. Invalid ID or Passcode. Please try again.\n\nEnter your IMS User ID:"); } } }