#!/bin/bash

# Set required variables
EASY_KERNEL_WORKFLOW=${EASY_KERNEL_WORKFLOW:-"kw"}
src_script_path=${src_script_path:-"$HOME/.config/$EASY_KERNEL_WORKFLOW/src"}
external_script_path=${external_script_path:-"$HOME/.config/$EASY_KERNEL_WORKFLOW/external"}
etc_files_path=${etc_files_path:-"$HOME/.config/$EASY_KERNEL_WORKFLOW/etc"}
config_files_path=${config_files_path:-"$HOME/.config/$EASY_KERNEL_WORKFLOW"}

# Export external variables required by kworkflow
export EASY_KERNEL_WORKFLOW

function kw()
{
  action=$1
  shift

  case "$action" in
    mount|mo)
      (
        . "$src_script_path"/vm.sh --source-only

        vm_mount
        local ret=$?
        alert_completion "kw build" "$1"
        return $ret
      )
      ;;
    umount|um)
      (
        . "$src_script_path"/vm.sh --source-only

        vm_umount
        local ret=$?
        alert_completion "kw build" "$1"
        return $ret
      )
      ;;
    boot|bo)
      (
        . "$src_script_path"/vm.sh --source-only

        vm_boot
      )
      ;;
    up|u)
      (
        . "$src_script_path"/vm.sh --source-only

        vm_up
      )
      ;;
    prepare|p)
      (
        . "$src_script_path"/vm.sh --source-only

        vm_prepare
        local ret=$?
        alert_completion "kw prepare" "$1"
        return $ret
      )
      ;;
    build|b)
      (
        . "$src_script_path"/mk.sh --source-only

        mk_build
        local ret=$?
        alert_completion "kw build" "$1"
        return $ret
      )
      ;;
    install|i)
      (
        . "$src_script_path"/mk.sh --source-only

        mk_install
        local ret=$?
        alert_completion "kw install" "$1"
        return $ret
      )
      ;;
    new|n)
      (
        . "$src_script_path"/mk.sh --source-only

        vm_new_release_deploy
        local ret=$?
        alert_completion "kw new" "$1"
        return $ret
      )
      ;;
    bi)
      (
        . "$src_script_path"/mk.sh --source-only

        mk_build && mk_install
        local ret=$?
        alert_completion "kw bi" "$1"
        return $ret
      )
      ;;
    ssh|s)
      (
        . "$src_script_path"/vm.sh --source-only

        vm_ssh $@
      )
      ;;
    vars|v)
      (
        . "$src_script_path"/commons.sh --source-only

        show_variables
      )
      ;;
    codestyle|c)
      (
      . "$src_script_path"/checkpatch_wrapper.sh --source-only

        execute_checkpatch $@
      )
      ;;
    maintainers|m)
      (
        . "$src_script_path"/get_maintainer_wrapper.sh --source-only

        execute_get_maintainer $@
      )
      ;;
    configm|g)
      (
        . "$src_script_path"/config_manager.sh --source-only

        execute_config_manager $@
      )
      ;;
    help|h)
      (
        . "$src_script_path"/help.sh --source-only

        kworkflow-help
      )
      ;;
    explore|e)
      (
        . "$src_script_path"/explore.sh --source-only

        explore "$@"
      )
      ;;
    man)
      (
        . $src_script_path/help.sh --source-only

        kworkflow-man
      )
      ;;
    *)
      (
        . "$src_script_path"/help.sh --source-only

        complain "Invalid option"
        kworkflow-help
        return 1
      )
      ;;
  esac
}

kw $@
