from datetime import datetime
from zoneinfo import ZoneInfo

JAKARTA_TZ = ZoneInfo("Asia/Jakarta")

def jakarta_now() -> datetime:
    """Returns the current datetime in Asia/Jakarta timezone (WIB, UTC+7)."""
    return datetime.now(JAKARTA_TZ)

def to_jakarta_iso(dt: datetime | None) -> str | None:
    """Converts a datetime to Asia/Jakarta ISO-8601 string representation."""
    if dt is None:
        return None
    if dt.tzinfo is None:
        dt = dt.replace(tzinfo=JAKARTA_TZ)
    else:
        dt = dt.astimezone(JAKARTA_TZ)
    return dt.isoformat()

def format_jakarta_display(dt: datetime | None, format_str: str = "%d %b %Y, %H:%M:%S WIB") -> str:
    """Formats a datetime into human readable Asia/Jakarta string."""
    if dt is None:
        return "-"
    if dt.tzinfo is None:
        dt = dt.replace(tzinfo=JAKARTA_TZ)
    else:
        dt = dt.astimezone(JAKARTA_TZ)
    return dt.strftime(format_str)
