{
    "version": "2.0.0",
    "tasks": [
        // OTHER
        {
            "label": "checkforsettings",
            "type": "shell",
            "group": "none",
            "detail": "Check that settings.json has been created",
            "command": "bash -c ${workspaceFolder}/.vscode/config.sh",
            "problemMatcher": []
        },
        {
            "label": "localrun",
            "type": "shell",
            "group": "none",
            "dependsOn": [
                "buildall"
            ],
            "detail": "Check for local runs, create a plugins folder",
            "command": "mkdir -p plugins",
            "problemMatcher": []
        },
        {
            "label": "remoterun",
            "type": "shell",
            "group": "none",
            "dependsOn": [
                "updateremote",
                "runpydeck"
            ],
            "detail": "Task for remote run launches",
            "command": "exit 0",
            "problemMatcher": []
        },
        {
            "label": "dependencies",
            "type": "shell",
            "group": "none",
            "detail": "Check for local runs, create a plugins folder",
            "command": "rsync -azp --rsh='ssh -p ${config:deckport} ${config:deckkey}' requirements.txt deck@${config:deckip}:${config:deckdir}/homebrew/dev/pluginloader/requirements.txt && ssh deck@${config:deckip} -p ${config:deckport} ${config:deckkey} 'python -m ensurepip && python -m pip install --upgrade pip && python -m pip install --upgrade setuptools && python -m pip install -r ${config:deckdir}/homebrew/dev/pluginloader/requirements.txt'",
            "problemMatcher": []
        },
        // BUILD
        {
            "label": "pnpmsetup",
            "type": "shell",
            "group": "build",
            "detail": "Setup pnpm",
            "command": "cd frontend && pnpm i",
            "problemMatcher": []
        },
        {
            "script": "watch",
            "type": "npm",
            "path": "frontend",
            "group": "build",
            "problemMatcher": [],
            "label": "watchfrontend",
            "detail": "rollup -c -w",
            "isBackground": true
        },
        {
            "label": "buildfrontend",
            "type": "npm",
            "group": "build",
            "detail": "rollup -c",
            "script": "build",
            "path": "frontend",
            "problemMatcher": []
        },
        {
            "label": "buildall",
            "group": "build",
            "detail": "Deploy pluginloader to deck",
            "dependsOrder": "sequence",
            "dependsOn": [
                "pnpmsetup",
                "buildfrontend"
            ],
            "problemMatcher": []
        },
        // DEPLOY
        {
            "label": "createfolders",
            "detail": "Create plugins folder in expected directory",
            "type": "shell",
            "group": "none",
            "dependsOn": [
                "checkforsettings"
            ],
            "command": "ssh deck@${config:deckip} -p ${config:deckport} ${config:deckkey} 'mkdir -p ${config:deckdir}/homebrew/dev/pluginloader && mkdir -p ${config:deckdir}/homebrew/dev/plugins'",
            "problemMatcher": []
        },
        {
            "label": "deploy",
            "detail": "Deploy dev PluginLoader to deck",
            "type": "shell",
            "group": "none",
            "command": "rsync -azp --delete --rsh='ssh -p ${config:deckport} ${config:deckkey}' --exclude='.git/' --exclude='.github/' --exclude='.vscode/' --exclude='frontend/' --exclude='dist/' --exclude='contrib/' --exclude='*.log' --exclude='requirements.txt' --exclude='backend/__pycache__/' --exclude='.gitignore' . deck@${config:deckip}:${config:deckdir}/homebrew/dev/pluginloader",
            "problemMatcher": []
        },
        // RUN
        {
            "label": "runpydeck",
            "detail": "Run indev PluginLoader on Deck",
            "type": "shell",
            "group": "none",
            "dependsOn": [
                "checkforsettings"
            ],
            "command": "ssh deck@${config:deckip} -p ${config:deckport} ${config:deckkey} 'export PLUGIN_PATH=${config:deckdir}/homebrew/dev/plugins; export CHOWN_PLUGIN_PATH=0; export LOG_LEVEL=DEBUG; cd ${config:deckdir}/homebrew/services; echo '${config:deckpass}' | sudo -SE python3 ${config:deckdir}/homebrew/dev/pluginloader/backend/main.py'",
            "problemMatcher": []
        },
        {
            "label": "runpylocal",
            "detail": "Run PluginLoader from python locally",
            "type": "shell",
            "group": "none",
            "command": "export PLUGIN_PATH=${workspaceFolder}/plugins; export CHOWN_PLUGIN_PATH=0; sudo -E python3 ${workspaceFolder}/backend/main.py",
            "problemMatcher": []
        },
        // ALL-IN-ONES
        {
            "label": "deployandrun",
            "detail": "Deploy and run, skipping JS build. Useful when combined with npm:watch",
            "dependsOrder": "sequence",
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "dependsOn": [
                "deploy",
                "runpydeck"
            ],
            "problemMatcher": []
        },
        {
            "label": "updateremote",
            "detail": "Build and deploy",
            "dependsOrder": "sequence",
            "group": "none",
            "dependsOn": [
                "buildall",
                "deploy"
            ],
            "problemMatcher": []
        },
        {
            "label": "updateandrun",
            "detail": "Build, deploy and run",
            "dependsOrder": "sequence",
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "dependsOn": [
                "buildfrontend",
                "deploy",
                "runpydeck"
            ],
            "problemMatcher": []
        },
        {
            "label": "allinone",
            "detail": "Build, install dependencies, deploy and run",
            "dependsOrder": "sequence",
            "group": {
                "kind": "build",
                "isDefault": false
            },
            "dependsOn": [
                "buildall",
                "createfolders",
                "dependencies",
                "deploy",
                "runpydeck"
            ],
            "problemMatcher": []
        }
    ]
}