# apps/wp_invoices/services/file_store.py
import os, uuid, json
from datetime import datetime

STAGING_ROOT = "files/invoices/_staging"

def _ensure_dir(path):
    os.makedirs(path, exist_ok=True)

def save_staging(data: bytes, filename: str, mimetype: str):
    uid = uuid.uuid4().hex
    folder = os.path.join(STAGING_ROOT, uid)
    _ensure_dir(folder)

    ext = ""
    if "." in filename:
        ext = "." + filename.split(".")[-1].lower()
    out_path = os.path.join(folder, f"original{ext or ''}")
    with open(out_path, "wb") as w:
        w.write(data)

    meta = {
        "id": uid,
        "folder": folder,
        "mimetype": mimetype,
        "filename": filename,
        "saved_at": datetime.utcnow().isoformat() + "Z"
    }
    with open(os.path.join(folder, "meta.json"), "w", encoding="utf-8") as w:
        json.dump(meta, w, ensure_ascii=False, indent=2)
    return meta

def save_json(folder: str, name: str, payload: dict):
    """
    Guarda un JSON (raw, analysis, etc.) en la carpeta indicada dentro de staging.
    name se usa como nombre de archivo sin extensión.
    """
    _ensure_dir(folder)
    path = os.path.join(folder, f"{name}.json")
    with open(path, "w", encoding="utf-8") as f:
        json.dump(payload, f, ensure_ascii=False, indent=2)
    return path