import 'package:doctor_app_flutter/core/service/authentication_service.dart';
import 'package:doctor_app_flutter/core/service/home/scan_qr_service.dart';
import 'package:doctor_app_flutter/core/service/patient/profile/discharge_summary_servive.dart';
import 'package:doctor_app_flutter/core/service/patient_medical_file/ER_signin/ER_signin_service.dart';
import 'package:doctor_app_flutter/core/service/pending_order_service.dart';
import 'package:doctor_app_flutter/core/service/security_service.dart';
import 'package:doctor_app_flutter/core/viewModel/dashboard_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/hospitals_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/medical_file_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/patient_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/pednding_orders_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/prescription/prescription_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/procedure_View_model.dart';
import 'package:doctor_app_flutter/core/viewModel/profile/discharge_summary_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/profile/operation_report_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/scan_qr_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/sick_leave_view_model.dart';
import 'package:doctor_app_flutter/screens/pharmacy_intervention/viewmodel/pharmacy_intervention_service.dart';
import 'package:doctor_app_flutter/screens/pharmacy_intervention/viewmodel/pharmacy_intervention_view_model.dart';
import 'package:get_it/get_it.dart';
import 'core/service/AnalyticsService.dart';
import 'core/service/NavigationService.dart';
import 'core/service/PatientRegistrationService.dart';
import 'core/service/VideoCallService.dart';
import 'core/service/home/dasboard_service.dart';
import 'core/service/home/doctor_reply_service.dart';
import 'core/service/home/schedule_service.dart';
import 'core/service/hospitals/hospitals_service.dart';
import 'core/service/patient/DischargedPatientService.dart';
import 'core/service/patient/LiveCarePatientServices.dart';
import 'core/service/patient/MyReferralPatientService.dart';
import 'core/service/patient/PatientMuseService.dart';
import 'core/service/patient/ReferralService.dart';
import 'core/service/patient/out_patient_service.dart';
import 'core/service/patient/patient-doctor-referral-service.dart';
import 'core/service/patient/patientInPatientService.dart';
import 'core/service/patient/patient_service.dart';
import 'core/service/patient/profile/intervention_medication_service.dart';
import 'core/service/patient/profile/operation_report_servive.dart';
import 'core/service/patient/profile/vte_assessment_service.dart';
import 'core/service/patient/referral_patient_service.dart';
import 'core/service/patient_medical_file/admission_request/patient-admission-request-service.dart';
import 'core/service/patient_medical_file/insurance/InsuranceCardService.dart';
import 'core/service/patient_medical_file/lab_order/labs_service.dart';
import 'core/service/patient_medical_file/medical_report/PatientMedicalReportService.dart';
import 'core/service/patient_medical_file/medical_report/medical_file_service.dart';
import 'core/service/patient_medical_file/prescription/medicine_service.dart';
import 'core/service/patient_medical_file/prescription/prescription_service.dart';
import 'core/service/patient_medical_file/procedure/procedure_service.dart';
import 'core/service/patient_medical_file/radiology/radiology_service.dart';
import 'core/service/patient_medical_file/sick_leave/sickleave_service.dart';
import 'core/service/patient_medical_file/soap/SOAP_service.dart';
import 'core/service/patient_medical_file/ucaf/patient-ucaf-service.dart';
import 'core/service/patient_medical_file/vital_sign/patient-vital-signs-service.dart';
import 'core/service/special_clinics/special_clinic_service.dart';
import 'core/viewModel/DischargedPatientViewModel.dart';
import 'core/viewModel/ER_sign_in/ER_sign_in_view_model.dart';
import 'core/viewModel/InsuranceViewModel.dart';
import 'core/viewModel/LiveCarePatientViewModel.dart';
import 'core/viewModel/PatientMedicalReportViewModel.dart';
import 'core/viewModel/PatientMuseViewModel.dart';
import 'core/viewModel/PatientRegistrationViewModel.dart';
import 'core/viewModel/PatientSearchViewModel.dart';
import 'core/viewModel/SOAP_view_model.dart';
import 'core/viewModel/doctor_replay_view_model.dart';
import 'core/viewModel/labs_view_model.dart';
import 'core/viewModel/medicine_view_model.dart';
import 'core/viewModel/patient-admission-request-viewmodel.dart';
import 'core/viewModel/patient-referral-viewmodel.dart';
import 'core/viewModel/patient-ucaf-viewmodel.dart';
import 'core/viewModel/patient-vital-sign-viewmodel.dart';
import 'core/viewModel/profile/intervention_medication_view_model.dart';
import 'core/viewModel/profile/vte_assessment_view_model.dart';
import 'core/viewModel/radiology_view_model.dart';
import 'core/viewModel/referral_view_model.dart';
import 'core/viewModel/schedule_view_model.dart';

GetIt locator = GetIt.instance;

///di
void setupLocator() {
  /// Services
  locator.registerLazySingleton(() => DoctorReplyService());
  locator.registerLazySingleton(() => ScheduleService());
  locator.registerLazySingleton(() => ReferralPatientService());
  locator.registerLazySingleton(() => MedicineService());
  locator.registerLazySingleton(() => PatientService());
  locator.registerLazySingleton(() => DashboardService());
  locator.registerLazySingleton(() => SickLeaveService());
  locator.registerLazySingleton(() => SOAPService());
  locator.registerLazySingleton(() => PatientReferralService());
  locator.registerLazySingleton(() => PrescriptionService());
  locator.registerLazySingleton(() => ProcedureService());
  locator.registerLazySingleton(() => VitalSignsService());
  locator.registerLazySingleton(() => MedicalFileService());
  locator.registerLazySingleton(() => AdmissionRequestService());
  locator.registerLazySingleton(() => UcafService());
  locator.registerLazySingleton(() => AuthenticationService());
  locator.registerLazySingleton(() => PatientMuseService());
  locator.registerLazySingleton(() => LabsService());
  locator.registerLazySingleton(() => InsuranceCardService());
  locator.registerLazySingleton(() => RadiologyService());
  locator.registerLazySingleton(() => ReferralService());
  locator.registerLazySingleton(() => MyReferralInPatientService());
  locator.registerLazySingleton(() => DischargedPatientService());
  locator.registerLazySingleton(() => PatientInPatientService());
  locator.registerLazySingleton(() => OutPatientService());
  locator.registerLazySingleton(() => HospitalsService());
  locator.registerLazySingleton(() => PatientMedicalReportService());
  locator.registerLazySingleton(() => LiveCarePatientServices());
  locator.registerLazySingleton(() => NavigationService());
  locator.registerLazySingleton(() => ScanQrService());
  locator.registerLazySingleton(() => SpecialClinicsService());
  locator.registerLazySingleton(() => VideoCallService());
  locator.registerLazySingleton(() => AnalyticsService());
  locator.registerLazySingleton(() => OperationReportService());
  locator.registerLazySingleton(() => PendingOrderService());
  locator.registerLazySingleton(() => PatientRegistrationService());
  locator.registerLazySingleton(() => DischargeSummaryService());
  locator.registerLazySingleton(() => VteAssessmentService());
  locator.registerLazySingleton(() => InterventionMedicationService());
  locator.registerLazySingleton(() => ERSignInService());
  locator.registerLazySingleton(() => PharmacyInterventionService());

  /// View Model
  locator.registerFactory(() => DoctorReplayViewModel());
  locator.registerFactory(() => ScheduleViewModel());
  locator.registerFactory(() => ReferralPatientViewModel());
  locator.registerFactory(() => MedicineViewModel());
  locator.registerFactory(() => PatientViewModel());
  locator.registerFactory(() => DashboardViewModel());
  locator.registerFactory(() => SickLeaveViewModel());
  locator.registerLazySingleton(() => SOAPViewModel());
  locator.registerFactory(() => PatientReferralViewModel());
  locator.registerFactory(() => PrescriptionViewModel());
  locator.registerFactory(() => ProcedureViewModel());
  locator.registerFactory(() => VitalSignsViewModel());
  locator.registerFactory(() => AdmissionRequestViewModel());
  locator.registerFactory(() => UcafViewModel());
  locator.registerFactory(() => MedicalFileViewModel());
  locator.registerFactory(() => PatientMuseViewModel());
  locator.registerFactory(() => LabsViewModel());
  locator.registerFactory(() => InsuranceViewModel());
  locator.registerFactory(() => RadiologyViewModel());
  locator.registerFactory(() => DischargedPatientViewModel());
  locator.registerFactory(() => PatientSearchViewModel());
  locator.registerFactory(() => HospitalViewModel());
  locator.registerFactory(() => LiveCarePatientViewModel());
  locator.registerFactory(() => PatientMedicalReportViewModel());
  locator.registerFactory(() => ScanQrViewModel());
  locator.registerFactory(() => OperationReportViewModel());
  locator.registerFactory(() => PatientRegistrationViewModel());
  locator.registerFactory(() => PendingOrdersViewModel());
  locator.registerFactory(() => DischargeSummaryViewModel());
  locator.registerFactory(() => VteAssessmentViewModel());
  locator.registerFactory(() => InterventionMedicationViewModel());
  locator.registerFactory(() => ERSignInViewModel());
  locator.registerFactory(() => PharmacyInterventionViewModel());
  locator.registerFactory<SecurityService>(() => SecurityServiceImpl());
}
