import subprocess
import sys


linter_settings = {
    "pylint": {
        "args": ["--reports=n", "--output-format=json"],
    },
    "flake8": {
        "args": ["--format", "%(row)d,%(col)d,%(code).1s,%(code)s:%(text)s"],
    },
    "bandit": {
        "args": [
            "-f",
            "custom",
            "--msg-template",
            "{line},{col},{severity},{test_id}:{msg}",
            "-n",
            "-1",
        ],
    },
    "mypy": {"args": []},
    "prospector": {
        "args": ["--absolute-paths", "--output-format=json"],
    },
    "pycodestyle": {
        "args": ["--format", "%(row)d,%(col)d,%(code).1s,%(code)s:%(text)s"],
    },
    "pydocstyle": {
        "args": [],
    },
    "pylama": {"args": ["--format=parsable"]},
}


def main():
    invoke = sys.argv[1]
    if invoke == "-m":
        linter = sys.argv[2]
        args = (
            [sys.executable, "-m", linter]
            + linter_settings[linter]["args"]
            + sys.argv[3:]
        )
    else:
        linter = sys.argv[2]
        args = [sys.argv[3]] + linter_settings[linter]["args"] + sys.argv[4:]

    if hasattr(subprocess, "run"):
        subprocess.run(args, encoding="utf-8", stdout=sys.stdout, stderr=sys.stderr)
    else:
        subprocess.call(args, stdout=sys.stdout, stderr=sys.stderr)


if __name__ == "__main__":
    main()
