#!/bin/bash
###############################################################
### Install profile generator script
### Copyright (C) 2021 ALEXPRO100 (alealexpro100)
### License: GPL v3.0
###############################################################

set -e

if [[ -n "$1" ]]; then
  CONFIG_FILE="$(realpath "$1")"
else
  CONFIG_FILE="$(realpath .)/last_gen.sh"
fi
if [[ ! -f ./version_install ]]; then
  cd "${BASH_SOURCE[0]%/*}"
  [[ ! -f ./version_install ]] && echo "Failed to locate version_install." && exit 1
fi
LI_VERSION="$(cat ./version_install)"
echo "Starting ${BASH_SOURCE[0]} $LI_VERSION"

#Use libraries
export ALEXPRO100_LIB_LOCATION="${ALEXPRO100_LIB_LOCATION:-./lib/alexpro100_lib.sh}"
# shellcheck disable=SC1091
source ./lib/common/lib_connect.sh
# shellcheck disable=SC1091
source ./lib/common/lib_var_op.sh
# shellcheck disable=SC1091
source ./lib/common/lib_ui.sh

AP100_DBG msg_print debug "var_num0=[${var_num[@]}]"

# shellcheck disable=SC1091
if [[ -f ./public_parameters ]]; then
  source ./public_parameters
else
  return_err "Public parameters not found!"
fi
# shellcheck disable=SC1091
[[ -f ./private_parameters ]] && source ./private_parameters

[[ -f ./customize.sh ]] && source ./customize.sh

add_var "declare -gx" "FORMAT_TYPE" "${FORMAT_TYPE}"
AP100_DBG msg_print debug "var_num1=[${var_num[@]}]"
#Language support.
# shellcheck disable=SC1090
source "${msg_dir:-./lib/msg/}/${LANG_INSTALLER:-en}.sh"

AP100_DBG msg_print debug "var_num2=[${var_num[@]}]"
ECHO_MODE=${SET_ECHO_MODE}
print_param note "$M_WELCOME"
add_var "declare -gx" "OP_MODE" "${OP_MODE}"
if [[ $SETUP_MODE == "manual" ]]; then
	if [[ $ECHO_MODE == "auto" ]]; then
		ECHO_MODE=dialog
	fi
fi
read_param "all install echo mode\n" "$M_ECHO_MODE" "dialog" ECHO_MODE menu_var "$(gen_menu < <(echo -e "dialog\ncli"))"
G_ECHO_MODE=${ECHO_MODE}
AP100_DBG msg_print debug "LIVE_MODE=[${LIVE_MODE}]"
if [[ $LIVE_MODE == "1" ]]; then
  CONFIG_FILE="/tmp/last_gen.sh"
  add_var "declare -gx" "dir" "${DEFAULT_DIR:-"/mnt/mnt"}"
else
  print_param note "$M_DIR_WARN\n$M_PROFILE_1 $CONFIG_FILE"
  read_param "" "$M_PATH" "${DEFAULT_DIR:-"/mnt/mnt"}" dir text
fi
ECHO_MODE=${G_ECHO_MODE}
read_param "$M_DISTR_1:\n" "$M_DISTR_2" "$DEFAULT_DISTR" distr menu_var "$(gen_menu < <(list_files "./lib/distr/" -type d | grep -v ubuntu))"
#print_param note "distr=[${distr}]"
if ! [[ $SETUP_MODE == "manual" ]]; then
	ECHO_MODE=auto
fi

AP100_DBG msg_print debug "var_num3=[${var_num[@]}]"
add_var "declare -gx" "OP_STEP" "DISTR_FINISH"
[[ -f ./customize.sh ]] && source ./customize.sh
#if [[ $SETUP_MODE == "manual" ]]; then
#	# shellcheck disable=SC1091
#	#source ./lib/common/common_options.sh
#	source ./lib/common/common_options_cst.sh
#else
#	# shellcheck disable=SC1091
#	source ./lib/common/common_options_cst.sh
#fi
source ./lib/common/common_options_cst.sh

# shellcheck disable=SC1090
source "./lib/distr/${distr:?}/distr_options.sh"

AP100_DBG msg_print debug "var_num4=[${var_num[@]}]"
ECHO_MODE=${G_ECHO_MODE}
if [[ $SETUP_MODE == "full auto" ]]; then
	ECHO_MODE=auto
fi

AP100_DBG msg_print debug "var_num5=[${var_num[@]}]"
## print_param note "ECHO_MODE=${ECHO_MODE}"
add_var "declare -gx" "ECHO_MODE" "${ECHO_MODE}"
#Final menu for changes.
var_final=''
until [[ $var_final == "0" ]]; do
  #Make menu, We use array to make parametres.
  AP100_DBG msg_print debug "LIVE_MODE=[${LIVE_MODE}]"
  if [[ $LIVE_MODE == "1" ]]; then
    vars_list="$M_LIST_FINAL_OPTION_LIVE"
  else
    vars_list="$M_LIST_FINAL_OPTION"
  fi
  # shellcheck disable=SC2154
  AP100_DBG msg_print debug "var_num=[${var_num[@]}]"
  for ((i=0; i<${#var_num[@]}; i++)); do
    var=${var_num[i]}
    if [[ ${!var} == "0" || ${!var} == "1" ]]; then
      if [[ ${!var} == "1" ]]; then
        vars_list+="\n${M_VAR_DESCRIPTION[$var]:-$var} | $M_YES"
      else
        vars_list+="\n${M_VAR_DESCRIPTION[$var]:-$var} | $M_NO"
      fi
    else
      vars_list+="\n${M_VAR_DESCRIPTION[$var]:-$var} | ${!var}"
    fi
  done
  #Print menu.
  NO_VAR=1 NO_HISTORY=1 read_param "$M_LIST_TEXT" "$M_LIST_DIALOG" "0" var_final menu "$(gen_menu < <(echo -e "$vars_list"))"
  #Decide what we have to do: change param and show menu again or end selection.
  if [[ $var_final != "0" ]]; then
    var="${var_num[$((${var_final#0}-1))]}"
    if [[ ${!var} == "0" || ${!var} == "1" ]]; then
      if [[ ${!var} == "0" ]]; then
        read_param "" "${M_VAR_DESCRIPTION[$var]:-$var}" "" "$var" no_or_yes
      else
        read_param "" "${M_VAR_DESCRIPTION[$var]:-$var}" "" "$var" yes_or_no
      fi
    else
      read_param "" "${M_VAR_DESCRIPTION[$var]:-$var}" "${!var}" "$var" text
    fi
  fi
done

AP100_DBG msg_print debug  "var_num=[${var_num[@]}]"
{
  echo -e "#Generated on $(date -u).\n"
  var_export "add_var "
} > "$CONFIG_FILE"

# =)
[[ $LIVE_MODE == "1" ]] || msg_print note "$M_NICE"
