import os
import uuid
import yt_dlp
from dotenv import load_dotenv

load_dotenv()

DOWNLOAD_PATH = os.getenv("DOWNLOAD_PATH", "./downloads")


def download(url: str) -> str | None:
    """
    Download media from URL using yt-dlp.
    Saves file with a UUID name to avoid Arabic/special character issues.
    Returns the file path on success, or None on failure.
    """
    os.makedirs(DOWNLOAD_PATH, exist_ok=True)

    safe_name = str(uuid.uuid4())
    ydl_opts = {
        "outtmpl": os.path.join(DOWNLOAD_PATH, f"{safe_name}.%(ext)s"),
        "quiet": True,
        "no_warnings": True,
    }

    try:
        with yt_dlp.YoutubeDL(ydl_opts) as ydl:
            info = ydl.extract_info(url, download=True)
            file_path = ydl.prepare_filename(info)
            return file_path
    except Exception:
        return None
