from __future__ import annotations

import os

from django.utils.encoding import iri_to_uri
from storages.backends.s3 import S3Storage


def _use_local_asset_urls() -> bool:
    return os.getenv('S3_USE_LOCAL_URLS', '').strip().lower() in {'1', 'true', 'yes', 'on'}


def _local_asset_url(prefix: str, name: str) -> str:
    return iri_to_uri(f'/{prefix}/{name.lstrip("/")}')


class StaticStorage(S3Storage):
    location = 'static'
    default_acl = 'public-read'
    querystring_auth = False
    file_overwrite = True
    object_parameters = {
        'CacheControl': 'public, max-age=31536000, immutable',
    }

    def url(self, name: str) -> str:
        if _use_local_asset_urls():
            return _local_asset_url('static', name)
        return super().url(name)


class MediaStorage(S3Storage):
    location = 'media'
    default_acl = 'public-read'
    querystring_auth = False
    file_overwrite = False
    object_parameters = {
        'CacheControl': 'public, max-age=604800',
    }

    def url(self, name: str) -> str:
        if _use_local_asset_urls():
            return _local_asset_url('media', name)
        return super().url(name)