# storage.py
"""
Gestion du stockage "avancé" pour agent_v0.

v0 :
- création d'une archive ZIP pour une session donnée
"""

from __future__ import annotations

import os
import zipfile

from config import SESSIONS_ROOT
from raw_session import RawSession


def create_session_zip(session: RawSession, base_dir: str | None = None) -> str:
    """
    Crée un ZIP contenant tout le dossier de la session :

    sessions/<session_id>/
      - <session_id>.json
      - shots/*.png

    Le ZIP est créé dans SESSIONS_ROOT :
      sessions/<session_id>.zip

    Retourne le chemin absolu du ZIP.
    """
    base_dir = base_dir or SESSIONS_ROOT

    session_dir = os.path.join(base_dir, session.session_id)
    if not os.path.isdir(session_dir):
        raise FileNotFoundError(f"Dossier de session introuvable : {session_dir}")

    zip_path = os.path.join(base_dir, f"{session.session_id}.zip")

    # On crée/écrase le zip
    with zipfile.ZipFile(zip_path, "w", compression=zipfile.ZIP_DEFLATED) as zf:
        for root, _, files in os.walk(session_dir):
            for name in files:
                full_path = os.path.join(root, name)
                # chemin relatif dans l'archive (à partir de SESSIONS_ROOT)
                arcname = os.path.relpath(full_path, base_dir)
                zf.write(full_path, arcname)

    return os.path.abspath(zip_path)
