from dataclasses import dataclass


@dataclass(frozen=True)
class FileTypeConfig:
    category: str
    mime_types: list[str]
    max_size_mb: float
    icon: str
    preview_supported: bool = False
    thumbnail_required: bool = False
    extract_text: bool = False
    notes: str = ""


FILE_TYPE_REGISTRY: dict[str, FileTypeConfig] = {
    ".jpg": FileTypeConfig("image", ["image/jpeg"], 10, "icon-jpg", True, True),
    ".jpeg": FileTypeConfig("image", ["image/jpeg"], 10, "icon-jpg", True, True),
    ".png": FileTypeConfig("image", ["image/png"], 10, "icon-png", True, True),
    ".gif": FileTypeConfig("image", ["image/gif"], 5, "icon-gif", True),
    ".webp": FileTypeConfig("image", ["image/webp"], 10, "icon-webp", True, True),
    ".svg": FileTypeConfig("image", ["image/svg+xml"], 2, "icon-svg", True),
    ".pdf": FileTypeConfig("document", ["application/pdf"], 50, "icon-pdf", True, True, True),
    ".doc": FileTypeConfig("document", ["application/msword"], 25, "icon-doc"),
    ".docx": FileTypeConfig(
        "document",
        ["application/vnd.openxmlformats-officedocument.wordprocessingml.document"],
        25,
        "icon-docx",
    ),
    ".xls": FileTypeConfig("document", ["application/vnd.ms-excel"], 25, "icon-xls"),
    ".xlsx": FileTypeConfig(
        "document",
        ["application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"],
        25,
        "icon-xlsx",
    ),
    ".ppt": FileTypeConfig("document", ["application/vnd.ms-powerpoint"], 50, "icon-ppt"),
    ".pptx": FileTypeConfig(
        "document",
        ["application/vnd.openxmlformats-officedocument.presentationml.presentation"],
        50,
        "icon-pptx",
    ),
    ".txt": FileTypeConfig("document", ["text/plain"], 5, "icon-txt", True, False, True),
    ".rtf": FileTypeConfig("document", ["application/rtf", "text/rtf"], 10, "icon-doc"),
    ".odt": FileTypeConfig("document", ["application/vnd.oasis.opendocument.text"], 25, "icon-doc"),
    ".ods": FileTypeConfig(
        "document", ["application/vnd.oasis.opendocument.spreadsheet"], 25, "icon-xls"
    ),
    ".odp": FileTypeConfig(
        "document", ["application/vnd.oasis.opendocument.presentation"], 50, "icon-ppt"
    ),
    ".csv": FileTypeConfig("data", ["text/csv", "text/plain", "application/csv"], 50, "icon-csv"),
    ".json": FileTypeConfig("data", ["application/json", "text/json", "text/plain"], 10, "icon-json"),
    ".xml": FileTypeConfig("data", ["application/xml", "text/xml"], 10, "icon-xml"),
    ".yaml": FileTypeConfig("data", ["text/yaml", "text/plain", "application/x-yaml"], 5, "icon-yaml"),
    ".yml": FileTypeConfig("data", ["text/yaml", "text/plain", "application/x-yaml"], 5, "icon-yaml"),
    ".zip": FileTypeConfig("archive", ["application/zip", "application/x-zip-compressed"], 200, "icon-zip"),
    ".tar": FileTypeConfig("archive", ["application/x-tar"], 200, "icon-zip"),
    ".gz": FileTypeConfig("archive", ["application/gzip", "application/x-gzip"], 200, "icon-zip"),
    ".tar.gz": FileTypeConfig("archive", ["application/gzip", "application/x-gzip"], 200, "icon-zip"),
    ".rar": FileTypeConfig(
        "archive", ["application/vnd.rar", "application/x-rar-compressed"], 200, "icon-zip"
    ),
    ".7z": FileTypeConfig("archive", ["application/x-7z-compressed"], 200, "icon-zip"),
    ".mp3": FileTypeConfig("media", ["audio/mpeg"], 50, "icon-audio"),
    ".wav": FileTypeConfig("media", ["audio/wav", "audio/x-wav"], 100, "icon-audio"),
    ".ogg": FileTypeConfig("media", ["audio/ogg"], 50, "icon-audio"),
    ".m4a": FileTypeConfig("media", ["audio/mp4", "audio/x-m4a"], 50, "icon-audio"),
    ".flac": FileTypeConfig("media", ["audio/flac"], 200, "icon-audio"),
    ".mp4": FileTypeConfig("media", ["video/mp4"], 500, "icon-video", True, True),
    ".avi": FileTypeConfig("media", ["video/x-msvideo"], 500, "icon-video"),
    ".mov": FileTypeConfig("media", ["video/quicktime"], 500, "icon-video"),
    ".mkv": FileTypeConfig("media", ["video/x-matroska"], 500, "icon-video"),
    ".webm": FileTypeConfig("media", ["video/webm"], 200, "icon-video", True),
    ".scorm": FileTypeConfig("elearning", ["application/zip", "application/x-zip-compressed"], 200, "icon-scorm"),
    ".h5p": FileTypeConfig("elearning", ["application/zip", "application/x-zip-compressed"], 100, "icon-h5p"),
    ".vtt": FileTypeConfig("subtitle", ["text/vtt", "text/plain"], 5, "icon-txt"),
    ".md": FileTypeConfig("code", ["text/markdown", "text/plain"], 2, "icon-txt", True),
    ".html": FileTypeConfig("code", ["text/html"], 2, "icon-code"),
    ".py": FileTypeConfig("code", ["text/plain", "text/x-python"], 2, "icon-code"),
    ".js": FileTypeConfig("code", ["text/javascript", "application/javascript"], 2, "icon-code"),
    ".css": FileTypeConfig("code", ["text/css"], 2, "icon-code"),
}

DEFAULT_MAX_SIZE_MB = 10

MODULE_SIZE_LIMITS: dict[str, float] = {
    "rims": 50,
    "rep": 500,
    "repository": 200,
    "mel": 25,
    "alumni": 10,
    "smehub": 100,
}
