// retoor <retoor@molodetz.nl>

export class CodeMirrorModes {
    static LANGUAGE_MODES = {
        "c": "text/x-csrc",
        "cpp": "text/x-c++src",
        "java": "text/x-java",
        "bash": "text/x-sh",
        "ruby": "text/x-ruby",
        "php": "text/x-php",
        "perl": "text/x-perl",
        "haskell": "text/x-haskell",
        "lua": "text/x-lua",
        "elixir": "text/x-elixir",
        "dart": "text/x-dart",
        "r": "text/x-rsrc",
        "scala": "text/x-scala",
    };

    static EXTENSION_MODES = {
        "py": "python",
        "js": "javascript", "mjs": "javascript", "cjs": "javascript", "jsx": "javascript",
        "ts": "text/typescript", "tsx": "text/typescript",
        "json": "application/json", "jsonc": "application/json",
        "c": "text/x-csrc", "h": "text/x-csrc",
        "cpp": "text/x-c++src", "cc": "text/x-c++src", "hpp": "text/x-c++src", "hh": "text/x-c++src",
        "cs": "text/x-csharp",
        "java": "text/x-java",
        "go": "go",
        "rb": "text/x-ruby",
        "php": "text/x-php",
        "pl": "text/x-perl", "pm": "text/x-perl",
        "lua": "text/x-lua",
        "r": "text/x-rsrc",
        "dart": "text/x-dart",
        "swift": "swift",
        "hs": "text/x-haskell",
        "sql": "sql",
        "sh": "text/x-sh", "bash": "text/x-sh", "zsh": "text/x-sh",
        "yaml": "yaml", "yml": "yaml",
        "md": "markdown", "markdown": "markdown",
        "html": "htmlmixed", "htm": "htmlmixed",
        "xml": "xml", "svg": "xml",
        "css": "css", "scss": "css", "sass": "css", "less": "css",
    };

    static FILENAME_MODES = {
        "dockerfile": "text/x-sh",
        "makefile": "text/x-sh",
        ".gitignore": "text/plain",
        ".env": "text/plain",
    };

    static modeForFilename(name) {
        const lower = (name || "").toLowerCase();
        if (this.FILENAME_MODES[lower]) return this.FILENAME_MODES[lower];
        const dot = lower.lastIndexOf(".");
        const ext = dot >= 0 ? lower.slice(dot + 1) : "";
        return this.EXTENSION_MODES[ext] || "plaintext";
    }
}
