"""
Service for tracking namechanges
"""
from datetime import timedelta

from django.utils import timezone

from .models import UsernameChange


class UsernameChanges(object):
    def __init__(self, user):
        self.left = 0
        self.next_on = None

        if user.acl['name_changes_allowed']:
            self.count_namechanges(user)

    def count_namechanges(self, user):
        name_changes_allowed = user.acl['name_changes_allowed']
        name_changes_expire = user.acl['name_changes_expire']

        valid_changes_qs = user.namechanges.filter(changed_by=user)
        if name_changes_expire:
            cutoff = timezone.now() - timedelta(days=name_changes_expire)
            valid_changes_qs = valid_changes_qs.filter(changed_on__gte=cutoff)

        used_changes = valid_changes_qs.count()
        if name_changes_allowed <= used_changes:
            self.left = 0
        else:
            self.left = name_changes_allowed - used_changes

        if not self.left and name_changes_expire:
            try:
                self.next_on = valid_changes_qs.latest().changed_on
                self.next_on += timedelta(days=name_changes_expire)
            except UsernameChange.DoesNotExist:
                pass