# -*- coding: utf-8 -*-
"""
Réglages de la plateforme.

Tout ce qui peut changer d'un hébergement à l'autre est ici, et se surcharge
par variable d'environnement. Sur o2switch, ces variables se posent dans le
fichier .env chargé par charger_env() ci-dessous.
"""

import os


def _racine():
    return os.path.dirname(os.path.abspath(__file__))


def charger_env():
    """Lit un fichier .env à la racine, sans dépendance externe.

    Format : une ligne CLE=valeur, les lignes vides et les # sont ignorés.
    Les variables déjà présentes dans l'environnement ont la priorité, pour
    qu'on puisse toujours surcharger le temps d'un lancement.
    """
    chemin = os.path.join(_racine(), ".env")
    if not os.path.exists(chemin):
        return
    with open(chemin, encoding="utf-8") as f:
        for ligne in f:
            ligne = ligne.strip()
            if not ligne or ligne.startswith("#") or "=" not in ligne:
                continue
            cle, _, valeur = ligne.partition("=")
            cle = cle.strip()
            valeur = valeur.strip().strip('"').strip("'")
            os.environ.setdefault(cle, valeur)


charger_env()

RACINE = _racine()
DOSSIER_PROJETS = os.environ.get("PLATEFORME_PROJETS", os.path.join(RACINE, "projets"))
DOSSIER_GABARITS = os.path.join(RACINE, "gabarits")
BASE = os.environ.get("PLATEFORME_BASE", os.path.join(RACINE, "projets.db"))

# --- Modèle ----------------------------------------------------------------
# Identifiant épinglé, pas un alias : une génération doit rester rejouable.
MODELE = os.environ.get("PLATEFORME_MODELE", "claude-opus-5")

# Plafond de jetons produits par tour. 64 000 impose le mode flux (c'est ce
# que fait claude.py), ce qui évite les expirations de requête HTTP.
MAX_JETONS = int(os.environ.get("PLATEFORME_MAX_JETONS", "64000"))

# Profondeur de réflexion. « high » est le réglage par défaut du modèle ;
# on le fixe explicitement pour que la valeur ne bouge pas sous nos pieds.
EFFORT = os.environ.get("PLATEFORME_EFFORT", "high")

# --- Garde-fous ------------------------------------------------------------
# Durée maximale d'un passage du worker. En dessous des limites usuelles d'un
# hébergement mutualisé : le processus s'arrête de lui-même avant d'être tué.
BUDGET_SECONDES = int(os.environ.get("PLATEFORME_BUDGET_SECONDES", "150"))

# Nombre maximal de tours d'API pour une génération. Filet de sécurité contre
# une boucle qui ne converge pas et consommerait le budget sans rien produire.
MAX_TOURS = int(os.environ.get("PLATEFORME_MAX_TOURS", "120"))

# Taille maximale d'un fichier écrit par le modèle (garde-fou disque).
MAX_OCTETS_FICHIER = int(os.environ.get("PLATEFORME_MAX_OCTETS_FICHIER", str(2 * 1024 * 1024)))

# Extensions que le modèle a le droit d'écrire dans site/.
EXTENSIONS_AUTORISEES = {
    ".html", ".htm", ".css", ".js", ".php", ".json", ".md", ".txt",
    ".svg", ".xml", ".webmanifest", ".htaccess", ".py",
}
