import datetime as dt
from zoneinfo import ZoneInfo

from flyway.domain.errors import BusinessError

NZ = ZoneInfo("Pacific/Auckland")


def utcnow() -> dt.datetime:
    return dt.datetime.now(dt.UTC)


def nz_today() -> dt.date:
    return dt.datetime.now(NZ).date()


def require_aware(value: dt.datetime, field: str) -> dt.datetime:
    """服务层只接受带时区的时间（文档 12.6）；不猜测时区。"""
    if value.tzinfo is None or value.utcoffset() is None:
        raise BusinessError(f'"{field}" must include a time zone.', field)
    return value
