#!/bin/env fish
set -l dir (status dirname)
source "$dir/../../lib/action.fish"

function installAction -V dir
    source "$dir/../../lib/hooks.fish"

    if not type -q getDeploymentScript
        function getDeploymentScript
            echo "No deployment script specified! No software will be installed." 1>&2
            false
        end
    end

    set -l deployScript (getDeploymentScript)
    runHook initialize || true
    and runHook installOS || true

    and runHook installSoftware || begin
        echo "Installing software..."

        and if [ -n "$deployScript" ]
            source $deployScript
        end
    end

    and runHook addUsers || begin
        source "$dir/users.fish"
    end

    runHook initializeUsers || begin
        if [ -n "$deployScript" ]
            source "$dir/../../lib/settings.fish"

            for name in (getUsers | jq '.[]' --raw-output0 | string split0)
                echo "Configuring user `$name`..."
                and source $deployScript userConfig $name
            end
        end
    end

    and runHook postInstall || true

    and begin
        echo "Cleaning installation scripts..."
        set -l projectPath (realpath "$(status dirname)/../../..")
        cd (dirname "$projectPath")
        # sudo rm -rf "$projectPath"
    end

    and echo "The installation finished successfully!"
    and echo "This machine will reboot in 5 seconds..."
    and echo "Press CTRL-C to abort..."
    and sleep 5
    and systemctl reboot -i
end

runSetupUserAction installAction