import 'package:flutter_bloc/flutter_bloc.dart'; import '../../data/models/directorate_models.dart'; import '../../data/repositories/directorate_repository.dart'; abstract class DirectorateState {} class DirectorateInitial extends DirectorateState {} class DirectorateLoading extends DirectorateState {} class DirectorateLoaded extends DirectorateState { final DirectorateOverview overview; final List schools; final Map rawData; DirectorateLoaded({ required this.overview, required this.schools, required this.rawData, }); } class SchoolPrincipalLoaded extends DirectorateState { final SchoolDetail school; final List teachers; final List labs; final Map rawData; SchoolPrincipalLoaded({ required this.school, required this.teachers, required this.labs, required this.rawData, }); } class DirectorateError extends DirectorateState { final String message; DirectorateError(this.message); } class DirectorateActionSuccess extends DirectorateState { final String message; final dynamic result; DirectorateActionSuccess(this.message, [this.result]); } /// Cubit managing state for Directorate and School Principal operations class DirectorateCubit extends Cubit { final DirectorateRepository _repository; DirectorateCubit({DirectorateRepository? repository}) : _repository = repository ?? DirectorateRepository(), super(DirectorateInitial()); /// Load directorate command overview Future loadDirectorateOverview() async { emit(DirectorateLoading()); try { final res = await _repository.getDirectorateDashboard(); if (res['status'] == 'success' || res.containsKey('directorate')) { final overview = DirectorateOverview.fromJson(res['directorate'] ?? {}); final schoolsList = (res['schools'] as List? ?? []) .map((s) => SchoolItem.fromJson(s)) .toList(); emit(DirectorateLoaded( overview: overview, schools: schoolsList, rawData: res, )); } else { emit(DirectorateError(res['message'] ?? 'فشل تحميل بيانات المديرية')); } } catch (e) { emit(DirectorateError('خطأ في الاتصال: $e')); } } /// Load school principal dashboard Future loadSchoolDashboard({int schoolId = 1}) async { emit(DirectorateLoading()); try { final res = await _repository.getSchoolDashboard(schoolId: schoolId); if (res['status'] == 'success' || res.containsKey('school')) { final school = SchoolDetail.fromJson(res['school'] ?? {}); final teachers = (res['teachers'] as List? ?? []) .map((t) => TeacherItem.fromJson(t)) .toList(); final labs = (res['computer_labs'] as List? ?? []) .map((l) => ComputerLabItem.fromJson(l)) .toList(); emit(SchoolPrincipalLoaded( school: school, teachers: teachers, labs: labs, rawData: res, )); } else { emit(DirectorateError(res['message'] ?? 'فشل تحميل بيانات المدرسة')); } } catch (e) { emit(DirectorateError('خطأ في الاتصال: $e')); } } /// Push exam to lab Future pushExam({ required int schoolId, required String examTitle, required String labName, required int deviceCount, }) async { try { final res = await _repository.pushExamToLab( schoolId: schoolId, examTitle: examTitle, labName: labName, deviceCount: deviceCount, ); emit(DirectorateActionSuccess('تم دفع الامتحان للمختبر بنجاح', res)); // Reload dashboard await loadSchoolDashboard(schoolId: schoolId); } catch (e) { emit(DirectorateError('فشل دفع الامتحان: $e')); } } }