from subprocess import run


def get_installed_extensions():
    process = run("code --list-extensions".split(), check=True, capture_output=True)
    return set(process.stdout.decode("utf-8").strip().split("\n"))


def main():
    print("starting vscode extension manager")

    extensions = {
        # vscode
        "ms-azuretools.vscode-docker",
        "ms-vscode-remote.remote-containers",
        "ms-vscode-remote.remote-ssh-edit",
        "ms-vscode-remote.remote-ssh",
        "ms-vscode.hexeditor",
        "ms-vscode.remote-explorer",
        "ms-vsliveshare.vsliveshare",
        "oderwat.indent-rainbow",
        "usernamehw.errorlens",
        # git
        "codezombiech.gitignore",
        "eamodio.gitlens",
        "gitHub.vscode-github-actions",
        # python
        "charliermarsh.ruff",
        "ms-python.python",
        "ms-python.vscode-pylance",
        "ms-python.debugpy",
        # rust
        "rust-lang.rust-analyzer",
        # MD
        "davidanson.vscode-markdownlint",
        "yzhang.markdown-all-in-one",
        # configs
        "redhat.vscode-yaml",
        "tamasfe.even-better-toml",
        # shell
        "timonwong.shellcheck",
        "foxundermoon.shell-format",
        # nix
        "jnoortheen.nix-ide",
        # database
        "mtxr.sqltools-driver-pg",
        "mtxr.sqltools",
        # other
        "esbenp.prettier-vscode",
        "mechatroner.rainbow-csv",
        "streetsidesoftware.code-spell-checker",
        "supermaven.supermaven",
    }

    installed_extensions = get_installed_extensions()

    missing_extensions = extensions.difference(installed_extensions)
    for extension in missing_extensions:
        run(f"code --install-extension {extension} --force".split(), check=True)

    if extra_extensions := installed_extensions.difference(extensions):
        print(f"Extra extensions installed: {extra_extensions}")

    print("vscode extension manager finished")


if __name__ == "__main__":
    main()