from datetime import date

from django.core.exceptions import ValidationError
from django.db.models import Q

from .models import CompanyPolicy


def get_effective_policy(company, on_date=None, *, required=True):
    on_date = on_date or date.today()
    policy = (
        CompanyPolicy.objects.filter(company=company, is_active=True, effective_from__lte=on_date)
        .filter(Q(effective_to__isnull=True) | Q(effective_to__gte=on_date))
        .order_by("-effective_from", "-pk")
        .first()
    )
    if required and not policy:
        raise ValidationError(f"No effective company policy is configured for {company} on {on_date}.")
    return policy
