import 'package:eatvio_app/features/consultations/models/consultation_progress.dart'; import 'package:eatvio_app/features/plans/enums/chosen_plan_state_enum.dart'; ConsultationProgress mapConsultationProgress({ required ChosenPlanStateEnum state, required bool hasPersonalDiet, }) { return ConsultationProgress( completedSteps: _completedSteps(state), showProgressPlank: _showProgressPlank(state), dietStatus: _dietStatus(state, hasPersonalDiet), phase: _phase(state), ); } Set _completedSteps(ChosenPlanStateEnum state) { switch (state) { case ChosenPlanStateEnum.stateInited: case ChosenPlanStateEnum.stateConfirmedByConsultant: case ChosenPlanStateEnum.stateInCoordination: case ChosenPlanStateEnum.stateCanceledByTheInitiator: return const {}; case ChosenPlanStateEnum.stateStartDateHasBeenSet: case ChosenPlanStateEnum.statePendingPayment: case ChosenPlanStateEnum.statePaymentFailed: return const {ConsultationStep.startDate}; case ChosenPlanStateEnum.statePaid: case ChosenPlanStateEnum.personalDietSet: return const {ConsultationStep.startDate, ConsultationStep.paid}; case ChosenPlanStateEnum.stateStarted: case ChosenPlanStateEnum.stateInProgress: case ChosenPlanStateEnum.stateLastDayStarted: case ChosenPlanStateEnum.stateLastDayFinished: case ChosenPlanStateEnum.stateComplained: return const { ConsultationStep.startDate, ConsultationStep.paid, ConsultationStep.inProgress, }; case ChosenPlanStateEnum.stateDone: case ChosenPlanStateEnum.stateChargeWasCollected: return const { ConsultationStep.startDate, ConsultationStep.paid, ConsultationStep.inProgress, ConsultationStep.finished, }; } } bool _showProgressPlank(ChosenPlanStateEnum state) { switch (state) { case ChosenPlanStateEnum.stateInited: case ChosenPlanStateEnum.stateConfirmedByConsultant: case ChosenPlanStateEnum.stateChargeWasCollected: case ChosenPlanStateEnum.stateCanceledByTheInitiator: case ChosenPlanStateEnum.statePaymentFailed: return false; case ChosenPlanStateEnum.stateInCoordination: case ChosenPlanStateEnum.stateStartDateHasBeenSet: case ChosenPlanStateEnum.statePendingPayment: case ChosenPlanStateEnum.statePaid: case ChosenPlanStateEnum.personalDietSet: case ChosenPlanStateEnum.stateStarted: case ChosenPlanStateEnum.stateInProgress: case ChosenPlanStateEnum.stateLastDayStarted: case ChosenPlanStateEnum.stateLastDayFinished: case ChosenPlanStateEnum.stateComplained: case ChosenPlanStateEnum.stateDone: return true; } } PersonalDietStatus _dietStatus( ChosenPlanStateEnum state, bool hasPersonalDiet, ) { if (!hasPersonalDiet) { return PersonalDietStatus.notRequired; } switch (state) { case ChosenPlanStateEnum.personalDietSet: case ChosenPlanStateEnum.stateStarted: case ChosenPlanStateEnum.stateInProgress: case ChosenPlanStateEnum.stateLastDayStarted: case ChosenPlanStateEnum.stateLastDayFinished: case ChosenPlanStateEnum.stateComplained: case ChosenPlanStateEnum.stateDone: case ChosenPlanStateEnum.stateChargeWasCollected: return PersonalDietStatus.proposed; case ChosenPlanStateEnum.stateInited: case ChosenPlanStateEnum.stateInCoordination: case ChosenPlanStateEnum.stateConfirmedByConsultant: case ChosenPlanStateEnum.stateStartDateHasBeenSet: case ChosenPlanStateEnum.statePendingPayment: case ChosenPlanStateEnum.statePaid: return PersonalDietStatus.notProposed; case ChosenPlanStateEnum.stateCanceledByTheInitiator: case ChosenPlanStateEnum.statePaymentFailed: return PersonalDietStatus.notRequired; } } ConsultationPhase _phase(ChosenPlanStateEnum state) { switch (state) { case ChosenPlanStateEnum.stateCanceledByTheInitiator: return ConsultationPhase.canceled; case ChosenPlanStateEnum.statePaymentFailed: return ConsultationPhase.paymentFailed; default: return ConsultationPhase.active; } }