from __future__ import annotations

from datetime import datetime
from zoneinfo import ZoneInfo

ROME_TZ = ZoneInfo("Europe/Rome")
ITALIAN_WEEKDAY_NAMES = [
    "lunedi",
    "martedi",
    "mercoledi",
    "giovedi",
    "venerdi",
    "sabato",
    "domenica",
]


def current_time_context() -> dict[str, str]:
    now_local = datetime.now(ROME_TZ)
    return {
        "current_date": now_local.date().isoformat(),
        "current_time": now_local.strftime("%H:%M"),
        "current_datetime": now_local.isoformat(timespec="minutes"),
        "timezone": "Europe/Rome",
        "weekday_italian": ITALIAN_WEEKDAY_NAMES[now_local.weekday()],
    }


def build_time_context_system_message() -> str:
    context = current_time_context()
    return (
        "Contesto temporale corrente del sistema:\n"
        f"- Data corrente: {context['current_date']}\n"
        f"- Ora corrente: {context['current_time']}\n"
        f"- Data e ora correnti: {context['current_datetime']}\n"
        f"- Giorno della settimana: {context['weekday_italian']}\n"
        f"- Timezone: {context['timezone']}\n"
        "Usa questo contesto per interpretare correttamente riferimenti relativi come oggi, domani, stasera e "
        "prossima settimana. Non inventare mai data o ora diverse da quelle deducibili dal contesto."
    )
