from datetime import date, timedelta

from app.core.config import get_settings
from app.models.enums import PolicyStatus


def compute_policy_status(end_date: date | None, current_status: PolicyStatus) -> PolicyStatus:
    if current_status in (PolicyStatus.RENEWED, PolicyStatus.CANCELLED, PolicyStatus.DRAFT):
        return current_status
    if end_date is None:
        return current_status
    today = date.today()
    settings = get_settings()
    if end_date < today:
        return PolicyStatus.EXPIRED
    if end_date <= today + timedelta(days=settings.expiring_soon_days):
        return PolicyStatus.EXPIRING_SOON
    return PolicyStatus.ACTIVE


def days_until_expiry(end_date: date | None) -> int | None:
    if end_date is None:
        return None
    return (end_date - date.today()).days
