getSymptomsPatternBasedOnCycleOld method
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;
}