from __future__ import annotations

import os
from datetime import date, timedelta
from pathlib import Path

GEO_API_URL = "https://geo.api.gouv.fr/communes"
GEO_API_PROVIDER = "geo-api-gouv"
OPEN_METEO_ARCHIVE_URL = "https://archive-api.open-meteo.com/v1/archive"

TIMEZONE = "Europe/Paris"

MIN_SEARCH_LENGTH = 2
MAX_PERIOD_DAYS = 31
MIN_HISTORICAL_DATE = date(1940, 1, 1)

COMMUNES_LIMIT = 10
COMMUNES_FIELDS = (
    "nom,code,codeDepartement,codesPostaux,centre,population,surface,departement,region"
)

COMMUNE_CACHE_TTL_SECONDS = 24 * 60 * 60
WEATHER_CACHE_TTL_SECONDS = 7 * 24 * 60 * 60
CACHE_MAX_ENTRIES = 500

NORMALS_REFERENCE_START = date(1991, 1, 1)
NORMALS_REFERENCE_END = date(2020, 12, 31)
NORMALS_REFERENCE_PERIOD = "1991-2020"
NORMALS_CACHE_TTL_SECONDS = 90 * 24 * 60 * 60
NORMALS_CACHE_MAX_ENTRIES = 200
NORMALS_CHUNK_YEARS = 10
MONTH_NAMES_FR = [
    "",
    "janvier",
    "février",
    "mars",
    "avril",
    "mai",
    "juin",
    "juillet",
    "août",
    "septembre",
    "octobre",
    "novembre",
    "décembre",
]

HTTP_TIMEOUT_SECONDS = float(os.getenv("HTTP_TIMEOUT_SECONDS", "15"))

SLUG_WITH_DEPT_PATTERN = r"^(.+)-(\d{2,3})$"
ISO_DATE_PATTERN = r"^\d{4}-\d{2}-\d{2}$"
OG_IMAGE_CACHE_TTL_SECONDS = 7 * 24 * 60 * 60
OG_IMAGE_CACHE_MAX_ENTRIES = 200
SITE_NAME = "HistoMétéo"

DATA_DIR = Path(__file__).resolve().parent.parent / "data"
FILE_CACHE_DIR = DATA_DIR / "weather_cache"
FILE_CACHE_TTL_SECONDS = 0

ADMIN_USERNAME = os.getenv("ADMIN_USERNAME", "admin")
ADMIN_PASSWORD = os.getenv("ADMIN_PASSWORD", "")
TRACKING_DB_PATH = DATA_DIR / "tracking.db"
ENVIRONMENT = os.getenv("HISTOMETEO_ENV", "dev")


def max_available_date() -> date:
    return date.today() - timedelta(days=1)
