getSymptomsPatternBasedOnCycleOld method

Future<List<SymptomsPattern>> getSymptomsPatternBasedOnCycleOld({
  1. int numberOfCycle = 5,
})

get Symptoms Pattern based on cycle

Implementation

Future<List<SymptomsPattern>> getSymptomsPatternBasedOnCycleOld(
    {int numberOfCycle = 5}) async {
  List<SymptomsPattern> symptomsPatternList = [];
  // Fetch logged symptoms data
  List<UserLogReportData> loggedData = await getSymptomsLogReport(
      startDate: DateTime.now().add(const Duration(days: -10000)),
      endDate: DateTime.now());

  if (loggedData.isEmpty) return symptomsPatternList;
  List<SymptomsData> symptomsDataList = [];

  Set<String> uniqueSymptoms = {}; // Using Set to prevent duplicates
  // printMenstrualCycleLogs("loggedData count ${loggedData.length}");
  if (loggedData.isNotEmpty) {
    // generate logged symptoms list

    for (var report in loggedData) {
      for (var symptom in report.symptomsData ?? []) {
        String symptomName = symptom.symptomName?.toLowerCase() ?? '';
        if (symptomName.isNotEmpty && uniqueSymptoms.add(symptomName)) {
          symptomsDataList.add(SymptomsData(
              symptomId: symptom.symptomId,
              symptomName: symptom.symptomName));
        }
      }
    }
    // printMenstrualCycleLogs("symptomsDataList count ${symptomsDataList.length}");
    if (symptomsDataList.isNotEmpty) {
      // get symptoms data based on cycle
      List<PeriodsDateRange> periodRange = await getAllPeriodsDetails();
      for (var symptoms in symptomsDataList) {
        // printMenstrualCycleLogs("symptomName ${symptoms.symptomName}");
        SymptomsPattern symptomsPattern = SymptomsPattern(cycleData: []);
        int symptomsCount = 0;
        symptomsPattern.symptomsName = symptoms.symptomName;
        // printMenstrualCycleLogs("symptomsName ${symptoms.symptomName}");
        for (var periodRangeItem in periodRange) {
          // generate cycle data
          CycleData cycleData = CycleData(cycleDates: []);
          // generate symptoms data
          List<CycleDates> cycleDatesList = [];
          for (int i = 0; i <= (periodRangeItem.cycleLength ?? 0); i++) {
            CycleDates cycleDates = CycleDates();
            cycleDates.cycleDate = CalenderDateUtils.dateDayFormat(
                DateTime.parse(periodRangeItem.cycleStartDate!)
                    .add(Duration(days: i)));
            //printMenstrualCycleLogs("cycleDate ${ cycleDates.cycleDate}");
            cycleDates.isFoundSymptoms = false;

            UserLogReportData? selectedObject = loggedData.firstWhere(
              (obj) => obj.logDate == DateTime.parse(cycleDates.cycleDate!),
              orElse: () => UserLogReportData(symptomsData: []),
            );

            if (selectedObject.symptomsData!.isNotEmpty) {
              for (SymptomsData symptom
                  in selectedObject.symptomsData ?? []) {
                bool exists = symptom.symptomName!.toLowerCase() ==
                    symptoms.symptomName!.toLowerCase();
                if (exists) {
                  symptomsCount = symptomsCount + 1;
                  cycleDates.isFoundSymptoms = true;
                }
              }
            }
            cycleDatesList.add(cycleDates);
          }
          cycleData.cycleDates!.addAll(cycleDatesList);
          cycleData.cycleStartDate = periodRangeItem.cycleStartDate;
          cycleData.cycleEndDate = periodRangeItem.cycleEndDate;
          cycleData.isCurrentCycle = (periodRangeItem.cycleEndDate != null &&
                  periodRangeItem.cycleEndDate!.isNotEmpty)
              ? false
              : true;
          symptomsPattern.cycleData!.add(cycleData);
        }
        symptomsPattern.numberOfCount = symptomsCount;
        symptomsPatternList.add(symptomsPattern);
      }
    }
  }
  return symptomsPatternList;
}