import 'package:comwell_key_app/authentication/authentication_repository.dart';
import 'package:comwell_key_app/presentation/app/bloc/app_cubit.dart';
import 'package:comwell_key_app/presentation/base/base_cubit.dart';
import 'package:comwell_key_app/presentation/screens/login/bloc/login_state.dart';
import 'package:comwell_key_app/routing/app_routes.dart';
import 'package:flutter/cupertino.dart';
import 'package:go_router/go_router.dart';
import 'package:msal_auth/msal_auth.dart';
class LoginCubit extends BaseCubit<LoginState> {
LoginCubit(
this._authRepository,
this._appCubit, {
required this.forced,
required this.redirectAfterLogin,
}) : super(const LoginState()) {
init();
}
final AuthenticationRepository _authRepository;
final AppCubit _appCubit;
final bool forced;
final String redirectAfterLogin;
Future<void> init() async {
if (forced) {
await _authRepository.logOut();
}
}
bool get isLoggedId => _authRepository.isLoggedIn;
Future<void> login(BuildContext context) async {
if (!_authRepository.isLoggedIn) {
await _authRepository.openAuth(Prompt.login);
}
if (context.mounted) redirect(context);
}
Future<void> createAccount() async {
await _authRepository.openAuth(Prompt.create);
}
void redirect(BuildContext context) async {
context.go(AppRoutes.overview);
if (redirectAfterLogin.isNotEmpty) {
// wait for previous nav to finish
await Future<void>.delayed(const Duration(milliseconds: 500));
// We navigate via deeplink handler to ensure we have a valid context
_appCubit.navigate(Uri.parse(redirectAfterLogin));
}
}
}