import 'package:bloc/bloc.dart'; import 'package:business_panel/core/services/token_storage_service.dart'; import 'package:dio/dio.dart'; import 'package:business_panel/core/utils/logging_interceptor.dart'; part 'auth_event.dart'; part 'auth_state.dart'; class AuthBloc extends Bloc { late final Dio _dio; final TokenStorageService _tokenStorage = TokenStorageService(); AuthBloc() : super(AuthInitial()) { _dio = Dio(); _dio.interceptors.add(LoggingInterceptor()); on((event, emit) async { emit(AuthLoading()); emit(AuthLoading()); try { final response = await _dio.post( 'https://fartak.liara.run/login/sendcode', data: { 'Phone': event.phoneNumber, 'Code': event.countryCode, }, ); if (response.statusCode == 200) { emit(AuthCodeSentSuccess()); } else { emit(AuthFailure(response.data['message'] ?? 'خطایی رخ داد')); } } on DioException catch (e) { emit(AuthFailure(e.response?.data['message'] ?? 'خطای شبکه')); } }); on((event, emit) async { emit(AuthLoading()); try { final response = await _dio.post( 'https://fartak.liara.run/login/getcode', data: { 'Phone': event.phoneNumber, 'Code': event.countryCode, 'OTP': event.otp, }, ); if (response.statusCode == 200 && response.data['data']['accessToken'] != null) { final accessToken = response.data['data']['accessToken']; final refreshToken = response.data['data']['refreshToken']; await _tokenStorage.saveTokens( accessToken: accessToken, refreshToken: refreshToken, ); emit(AuthVerified()); } else { emit(AuthFailure(response.data['message'] ?? 'کد تایید صحیح نمی‌باشد.')); } } on DioException catch (e) { emit(AuthFailure(e.response?.data['message'] ?? 'خطای شبکه')); } }); on((event, emit) async { emit(AuthLoading()); await Future.delayed(const Duration(milliseconds: 500)); if (event.name.trim().isEmpty) { emit(AuthFailure('لطفاً نام خود را وارد کنید.')); } else { emit(UserInfoSaved()); } }); } }