period property

DateTimePeriodModel get period

Implementation

DateTimePeriodModel get period {
  final currentDateTime = DateTime.now();
  final currentDate = DateTime(
      currentDateTime.year, currentDateTime.month, currentDateTime.day);

  final thisDateTime = this!;
  final thisDate =
      DateTime(thisDateTime.year, thisDateTime.month, thisDateTime.day);

  final differenceInDays = thisDate.difference(currentDate).inDays;
  final differenceInHours = thisDateTime.difference(currentDateTime).inHours;
  final differenceInMinutes =
      thisDateTime.difference(currentDateTime).inMinutes;
  final differenceInSeconds =
      thisDateTime.difference(currentDateTime).inSeconds;

  if (differenceInDays < -13)
    return DateTimePeriodModel(period: DateTimePeriod.general);
  if (differenceInDays < -6)
    return DateTimePeriodModel(period: DateTimePeriod.lastWeek);
  if (differenceInDays.between(-6, -2))
    return DateTimePeriodModel(
        period: DateTimePeriod.beforeFewDays, amount: differenceInDays.abs());
  if (differenceInDays == -1)
    return DateTimePeriodModel(period: DateTimePeriod.yesterday);

  if (differenceInDays == 0 && differenceInHours < 0)
    return DateTimePeriodModel(
        period: DateTimePeriod.beforeFewHours,
        amount: differenceInHours.abs());

  if (differenceInDays == 0 &&
      differenceInHours == 0 &&
      differenceInMinutes < 0)
    return DateTimePeriodModel(
        period: DateTimePeriod.beforeFewMinutes,
        amount: differenceInMinutes.abs());

  if (differenceInDays == 0 &&
      differenceInHours == 0 &&
      differenceInMinutes == 0 &&
      differenceInSeconds < 0)
    return DateTimePeriodModel(
        period: DateTimePeriod.beforeFewSeconds,
        amount: differenceInSeconds.abs());
  if (differenceInDays == 0 &&
      differenceInHours == 0 &&
      differenceInMinutes == 0 &&
      differenceInSeconds == 0)
    return DateTimePeriodModel(period: DateTimePeriod.now);
  if (differenceInDays == 0 &&
      differenceInHours == 0 &&
      differenceInMinutes == 0 &&
      differenceInSeconds > 0)
    return DateTimePeriodModel(
        period: DateTimePeriod.afterFewSeconds, amount: differenceInSeconds);

  if (differenceInDays == 0 &&
      differenceInHours == 0 &&
      differenceInMinutes > 0)
    return DateTimePeriodModel(
        period: DateTimePeriod.afterFewMinutes, amount: differenceInMinutes);

  if (differenceInDays == 0 && differenceInHours > 0)
    return DateTimePeriodModel(
        period: DateTimePeriod.afterFewHours, amount: differenceInHours);

  if (differenceInDays == 1)
    return DateTimePeriodModel(period: DateTimePeriod.tomorrow);
  if (differenceInDays.between(2, 6))
    return DateTimePeriodModel(
        period: DateTimePeriod.afterFewDays, amount: differenceInDays);
  if (differenceInDays > 6)
    return DateTimePeriodModel(period: DateTimePeriod.nextWeek);
  if (differenceInDays > 13)
    return DateTimePeriodModel(period: DateTimePeriod.general);

  return DateTimePeriodModel(period: DateTimePeriod.general);
}