import os
import uuid
from typing import Tuple

# Files stored at: backend/uploads/portfolio/
_UPLOAD_DIR = os.path.join(
    os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))),
    "uploads",
    "portfolio",
)


def _ensure_dir() -> None:
    os.makedirs(_UPLOAD_DIR, exist_ok=True)


def save_file(file_data: bytes, original_filename: str) -> Tuple[str, str]:
    """Save bytes to local storage.

    Returns:
        (stored_filename, view_url)
        stored_filename: UUID-based filename on disk, e.g. "abc123.pdf"
        view_url: path to the public serving endpoint, e.g. "/api/portfolio/attachments/abc123.pdf"
    """
    _ensure_dir()
    ext = os.path.splitext(original_filename)[1].lower()
    stored_filename = f"{uuid.uuid4().hex}{ext}"
    with open(os.path.join(_UPLOAD_DIR, stored_filename), "wb") as fh:
        fh.write(file_data)
    view_url = f"/api/portfolio/attachments/{stored_filename}"
    return stored_filename, view_url


def delete_file(stored_filename: str) -> None:
    """Delete a file from local storage (no-op if missing)."""
    # Guard against path traversal
    if "/" in stored_filename or ".." in stored_filename:
        return
    path = os.path.join(_UPLOAD_DIR, stored_filename)
    if os.path.exists(path):
        os.remove(path)


def get_full_path(stored_filename: str) -> str:
    """Return the absolute filesystem path for a stored filename."""
    return os.path.join(_UPLOAD_DIR, stored_filename)
