"""
Classify file formats based on extension
"""
from typing import Tuple, List

PIC_FILES = (".jfif", ".jpg", ".jpeg", ".png", ".gif", ".svg", ".webp", ".apng", ".avif", ".ico")
# https://developer.mozilla.org/fr/docs/Web/Media/Formats/Image_types
FONTS_FILES = (".otf", ".ttf", ".woff", ".woff2")
WEB_FILES = (".css", ".html", ".htm")
AUDIO_FILES = (".mp3", ".flac", ".ogg")
VIDEO_FILES = (".mp4", ".webm", ".ogv")
DOC_FILES = (".txt", ".pdf", ".odt", ".doc", ".docx", ".pptx")
ARCHIVE_FILES = (".zip", ".tar.gz", ".7z", ".tar.bz2", ".tar.xz")
BAD_FILES = (
    ".db",
    ".log",
    ".cs1",
    ".sample",
    ".bmp",
    ".tiff",
    ".exe",
    ".psd",
    ".mov",  # bad idea: https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Containers
    ".webmanifest",
    ".php",  # forbidden !
    ".js",  # forbidden !
    ".ds_store",
    "",
)


def good_files() -> Tuple[str, ...]:
    white_list: List[str] = []
    for name, value in globals().items():
        if name.endswith("_FILES") and name != "BAD_FILES":
            assert isinstance(value, tuple)
            for ext in value:
                white_list.append(ext)
    return tuple(white_list)


GOOD_FILES = good_files()

assert ".html" in GOOD_FILES and ".css" in GOOD_FILES
