import 'package:flutter_bloc/flutter_bloc.dart'; import '../../data/models/teacher_models.dart'; import '../../data/repositories/teacher_repository.dart'; /** * ============================================================================== * SAQEL TEACHER STUDIO - MONETIZATION CUBIT * ============================================================================== * * إدارة المحفظة المالية والتسييل وسحوبات كليك (CliQ Payouts): * - حساب عوائد النموذج المزدوج (1,420 مجاني مدعوم مقابل 380 مدفوع خارجي) * - تقسيم الحصص: 55% للمعلم / 15% لمديرية الثقافة / 30% للمنصة * - إرسال واعتماد طلبات السحب عبر كليك. */ class TeacherMonetizationState { final double studentSubscribers; final double pricePerCourse; final List courses; final List payoutRequests; final bool isSubmittingPayout; const TeacherMonetizationState({ required this.studentSubscribers, required this.pricePerCourse, required this.courses, required this.payoutRequests, required this.isSubmittingPayout, }); double get grossRevenue => studentSubscribers * pricePerCourse; double get teacherShare => grossRevenue * 0.55; double get directorateShare => grossRevenue * 0.15; double get platformShare => grossRevenue * 0.30; TeacherMonetizationState copyWith({ double? studentSubscribers, double? pricePerCourse, List? courses, List? payoutRequests, bool? isSubmittingPayout, }) { return TeacherMonetizationState( studentSubscribers: studentSubscribers ?? this.studentSubscribers, pricePerCourse: pricePerCourse ?? this.pricePerCourse, courses: courses ?? this.courses, payoutRequests: payoutRequests ?? this.payoutRequests, isSubmittingPayout: isSubmittingPayout ?? this.isSubmittingPayout, ); } } class TeacherMonetizationCubit extends Cubit { final TeacherRepository repository; TeacherMonetizationCubit({required this.repository}) : super(const TeacherMonetizationState( studentSubscribers: 380, pricePerCourse: 20.0, courses: [], payoutRequests: [ TeacherPayoutRequestModel( cliqAlias: 'AHMAD@CLIQ', amountJod: 2400.0, requestedAt: 'الأسبوع الماضي', status: 'completed', ), ], isSubmittingPayout: false, )); Future loadMonetization() async { final courses = await repository.getPublishedCourses(); emit(state.copyWith(courses: courses)); } void updateSubscribers(double subscribers) { emit(state.copyWith(studentSubscribers: subscribers)); } Future submitCliqPayout({ required String cliqAlias, required double amountJod, }) async { emit(state.copyWith(isSubmittingPayout: true)); try { final req = await repository.requestCliqPayout( cliqAlias: cliqAlias, amountJod: amountJod, ); final updatedList = List.from(state.payoutRequests)..insert(0, req); emit(state.copyWith( payoutRequests: updatedList, isSubmittingPayout: false, )); } catch (_) { emit(state.copyWith(isSubmittingPayout: false)); } } }