import 'package:bloc/bloc.dart';
import 'package:kmobile/api/services/user_service.dart';
import 'package:kmobile/core/errors/exceptions.dart';
import '../../../data/repositories/auth_repository.dart';
import 'auth_state.dart';

class AuthCubit extends Cubit<AuthState> {
  final AuthRepository _authRepository;
  final UserService _userService;

  AuthCubit(this._authRepository, this._userService) : super(AuthInitial()) {
    checkAuthStatus();
  }

  Future<void> checkAuthStatus() async {
    emit(AuthLoading());
    try {
      final isLoggedIn = await _authRepository.isLoggedIn();
      if (isLoggedIn) {
        final users = await _userService.getUserDetails();
        emit(Authenticated(users));
      } else {
        emit(Unauthenticated());
      }
    } catch (e) {
      emit(AuthError(e.toString()));
    }
  }

  Future<void> refreshUserData() async {
    try {
      // emit(AuthLoading());
      final users = await _userService.getUserDetails();
      emit(Authenticated(users));
    } catch (e) {
      emit(AuthError('Failed to refresh user data: ${e.toString()}'));
      // Optionally, re-emit the previous state or handle as needed
    }
  }

  Future<void> login(String customerNo, String password) async {
    emit(AuthLoading());
    try {
      final users = await _authRepository.login(customerNo, password);
      emit(Authenticated(users));
    } catch (e) {
      emit(AuthError(e is AuthException ? e.message : e.toString()));
    }
  }
}
