import 'package:flutter_bloc/flutter_bloc.dart'; import '../../../core/api/api_exception.dart'; import '../../../core/api/api_failure.dart'; import '../../../core/session/app_user.dart'; import '../../../core/ui/view_status.dart'; import '../data/profile_repository.dart'; class ProfileState { const ProfileState({ this.status = ViewStatus.success, this.saving = false, this.failure, this.user, }); final ViewStatus status; final bool saving; final AuthFailure? failure; final AppUser? user; ProfileState copyWith({ ViewStatus? status, bool? saving, AuthFailure? failure, AppUser? user, bool clearFailure = false, }) { return ProfileState( status: status ?? this.status, saving: saving ?? this.saving, failure: clearFailure ? null : (failure ?? this.failure), user: user ?? this.user, ); } } /// إكمال الملف بعد أول دخول. عقد الخادم يقبل `{ name, language }` فقط /// (docs/38 §3) — لا اسم أول/أخير ولا بريد كما في سيرو (docs/39 §2). class ProfileCubit extends Cubit { ProfileCubit(this._repo) : super(const ProfileState()); final ProfileRepository _repo; Future save(String name) async { emit(state.copyWith(saving: true, clearFailure: true)); try { final user = await _repo.update(name: name.trim()); emit(state.copyWith(saving: false, user: user)); return user; } on ApiException catch (e) { emit(state.copyWith(saving: false, failure: e.toAuthFailure())); return null; } } }