#!/bin/env fish
begin
    set -l dir (status dirname)
    source "$dir/../../Scripts/software.fish"

    function configureSW -V dir
        sudo cp "$dir/rclone.service" "$dir/rclone.target" "$dir/rclone@.service" /etc/systemd/user
    end

    function userConfig -V dir -a name
        source "$dir/../../Scripts/config.fish"
        set -l key "valhalla.users.$name.rclone.configurations"
        set -l configs (getConfig "$key" --apply "builtins.attrNames" --json)

        if [ (echo "$configs" | jq "length") -gt 0 ]
            if [ "$XDG_SESSION_TYPE" = "tty" ]
                set -l entryPoint ~"$name"/.config/autostart/PortValhallaProfile.desktop
                sudo -u "$name" mkdir -p "$(dirname "$entryPoint")"

                begin
                    printf %s\n \
                        "#!/user/bin/env xdg-open" \
                        "[Desktop Entry]" \
                        "Name=PortValhalla Profile" \
                        "Type=Application" \
                        "Terminal=false" (
                            printf "%s " \
                                "Exec=env" \
                                "CONFIG_MODULE=$(echo "$CONFIG_MODULE" | string escape)" \
                                "konsole -e fish $(realpath (status filename) | string escape) userConfig"
                        )
                end | sudo -u "$name" tee "$entryPoint" > /dev/null

                sudo chmod +x "$entryPoint"
                sudo -Eu "$name" dbus-launch --exit-with-session startplasma-wayland &> /dev/null
                rm "$entryPoint"
                rm ~"$name"/.config/plasma-welcomerc
            else if [ -n "$name" ] && [ "$name" != "$USER" ]
                sudo -Eu "$name" CONFIG_MODULE="$CONFIG_MODULE" fish "$(status filename)" userConfig
            else
                systemctl --user enable rclone.service
                echo "Please complete the setup of your rclone configurations!"

                for config in (echo "$configs" | jq '.[]' --raw-output0 | string split0)
                    set -l configKey "$key.$config"
                    set -l duration "$configKey.cacheDuration"

                    set -l serviceName "rclone@$config:$(getConfig "$configKey.dirName")"

                    if isSet "$duration"
                        set serviceName "$serviceName:$(getConfig "$duration")"
                    end

                    echo "Please create a remote called `$config`."
                    rclone config || true
                    systemctl --user enable "$serviceName" --now || true
                end
            end
        end
    end

    runInstaller $argv
end