"""Assets for testing. vLLM conveniently has a bucket of public assets
we can use."""
import os
from functools import lru_cache
from pathlib import Path
from typing import Optional

import aphrodite.common.envs as envs
from aphrodite.connections import global_http_connection


def get_default_cache_root():
    return os.getenv(
        "XDG_CACHE_HOME",
        os.path.join(os.path.expanduser("~"), ".cache"),
    )

vLLM_S3_BUCKET_URL = "https://vllm-public-assets.s3.us-west-2.amazonaws.com"
APHRODITE_ASSETS_CACHE = envs.APHRODITE_ASSETS_CACHE
APHRODITE_IMAGE_FETCH_TIMEOUT = envs.APHRODITE_IMAGE_FETCH_TIMEOUT

def get_cache_dir() -> Path:
    """Get the path to the cache for storing downloaded assets."""
    path = Path(APHRODITE_ASSETS_CACHE)
    path.mkdir(parents=True, exist_ok=True)

    return path


@lru_cache
def get_vllm_public_assets(filename: str,
                           s3_prefix: Optional[str] = None) -> Path:
    """
    Download an asset file from ``s3://vllm-public-assets``
    and return the path to the downloaded file.
    """
    asset_directory = get_cache_dir() / "vllm_public_assets"
    asset_directory.mkdir(parents=True, exist_ok=True)

    asset_path = asset_directory / filename
    if not asset_path.exists():
        if s3_prefix is not None:
            filename = s3_prefix + "/" + filename
        global_http_connection.download_file(
            f"{vLLM_S3_BUCKET_URL}/{filename}",
            asset_path,
            timeout=APHRODITE_IMAGE_FETCH_TIMEOUT)

    return asset_path
