def get_next_reset_date()

in privaterelay/management/commands/update_phone_remaining_stats.py [0:0]


def get_next_reset_date(profile: Profile) -> datetime:
    # TODO: consider moving this as a property in Profile model
    # assumes that profile being passed have already been checked to have
    # phone subscription or a free phone user
    if profile.date_phone_subscription_reset is None:
        # there is a problem with the sync_phone_related_dates_on_profile
        # or a new foxfooder whose date_phone_subscription_reset did not get set in
        if profile.fxa:
            fxa_uid = profile.fxa.uid
        else:
            fxa_uid = "None"
        logger.error(
            "phone_user_profile_dates_not_set",
            extra={
                "fxa_uid": fxa_uid,
                "date_subscribed_phone": profile.date_phone_subscription_end,
                "date_phone_subscription_start": profile.date_phone_subscription_start,
                "date_phone_subscription_reset": profile.date_phone_subscription_reset,
                "date_phone_subscription_end": profile.date_phone_subscription_end,
            },
        )
        return datetime.now(UTC) - timedelta(minutes=15)

    calculated_next_reset_date = profile.date_phone_subscription_reset + timedelta(
        settings.MAX_DAYS_IN_MONTH
    )
    if profile.date_phone_subscription_end is None:
        return calculated_next_reset_date
    if profile.date_phone_subscription_end < calculated_next_reset_date:
        # return the past or the closest next reset date
        return profile.date_phone_subscription_end
    return calculated_next_reset_date