#!/bin/bash
#
# config - for tod
#
# Copyright 2019 Luigi Santivetti <luigi.santivetti@gmail.com>

# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"),
# to deal in the Software without restriction, including without limitation
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
# and/or sell copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following conditions:

# The above copyright notice and this permission notice (including the next
# paragraph) shall be included in all copies or substantial portions of the
# Software.

# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

# Absolute path to where this script lives
declare -rg script_dir="$(get_script_dir)"

# Runtime timestamp of when this script was executed
declare -rg script_now="$(get_script_now)"

# Version file name
declare -rg __version="version"

# Module staging area name
declare -rg staging="staging"

# Name of this host's instance, it defaults to localhost
declare -rg def_hostname="localhost"
declare -rg host_name="${HOST_NAME:-$def_hostname}"

# Switch for enabling debug features, it defaults to debug
declare -rg release="release"
declare -rg debug="debug"
declare -rg instance_mode="${INSTANCE_MODE:-$debug}"

# Force to use also blacklisted modules
declare -rgi modall="${MODALL:-0}"

# Default answer instead of waiting for user input
declare -rg answer=${DEFANS:-}

# Runtime enabled list of modules
declare -ag MODULES=( )

# Blacklist modules
declare -arg BLMODULES=( "test1" "test2" )

# Runtime running option
declare -Ag OPTIONS=( \
	[check]=0 [watch]=0 [fetch]=0 [doall]=0 [doins]=0 \
	[upins]=0 [upmod]=0 [upall]=0 [clmod]=0 [clins]=0 \
)

# Instance tree
declare -rg def_instance_d="$script_dir/$host_name"
declare -rg instance_d="${INSTANCE_DIR-$def_instance_d}"
declare -rg docker_d="$instance_d/docker"
declare -rg rootfs_d="$instance_d/rootfs"

# Module tree
declare -rg module_d="$script_dir/module"
declare -rg scheme_sh="scheme.sh"
declare -rg holder_sh="holder.sh"
declare -rg module_sh="module.sh"

# Runtime password file
declare -rg passwd_sh="${PASSWD_F:-}"

# Module common files
declare -rg common_sh="$module_d/common.sh"
declare -rg manifest_f="${MANIFEST_F:-$script_dir/MANIFEST}"
declare -rg uninstall_f="$instance_d/uninstall.sh"

# Set of regular expressions for accomplishing module validation
declare -rg rex_legal_holder_token="_([0-9]|[A-Z])+"
declare -rg rex_legal_holder_variable="($rex_legal_holder_token)+_"
declare -rg rex_legal_holder_assignment_op="[\+]?="
declare -rg rex_legal_holder_assignment_lhs=\
"$rex_legal_holder_variable$rex_legal_holder_assignment_op\""
declare -rg rex_illegal_holder_assignment_rhs=".+[^\\]\".+"
declare -rg dynamic_typedef="local -r"
declare -rg rex_legal_dynamic_typedef="local[[:space:]]\-r"
declare -rg rex_legal_dynamic_assignment_lhs=\
"$rex_legal_dynamic_typedef $rex_legal_holder_assignment_lhs"
declare -rg head_tag=">>>>>"
declare -rg foot_tag="<<<<<"
declare -rg rex_legal_file_header_tag="#[[:space:]]$head_tag[[:space:]].*"
declare -rg rex_legal_file_footer_tag="#[[:space:]]$foot_tag[[:space:]].*"
declare -rg rex_legal_manifest_hook_begin="@@MIRROR_BEGIN@@"
declare -rg rex_legal_manifest_hook_ended="@@MIRROR_ENDED@@"

# Credits
declare -rg credits_year="2019"
declare -rg credits_author="Luigi Santivetti"
declare -rg credits_email="luigi.santivetti@gmail.com"
declare -rg credits_vers="1.0 beta"

declare -rg license="\
# Copyright ${credits_year} ${credits_author} <${credits_email}>

# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the \"Software\"),
# to deal in the Software without restriction, including without limitation
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
# and/or sell copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following conditions:

# The above copyright notice and this permission notice (including the next
# paragraph) shall be included in all copies or substantial portions of the
# Software.

# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

# This file is autogenerated with tod ${credits_vers} and manual edit can break
# your instance. Update this file using tod instead, check tod --help."

# Logging and debug
declare -irg LOG_D="${LOG_D:-0}"
declare -irg LOG_I="${LOG_I:-1}"
declare -irg LOG_W="${LOG_W:-1}"
declare -irg LOG_X="${LOG_X:-1}"

# Return codes
declare -ir s_ok=0
declare -ir s_err=1
declare -ir s_unbound=2
declare -ir s_maybe_unbound=3
declare -ir s_bound=4
declare -ir s_null=5
declare -ir s_unk_stdout=6
declare -ir s_unk_stderr=7
declare -ir s_inv_lhs=8
declare -ir s_err2=9
declare -ir s_err3=10
declare -ir s_err4=11
declare -ir s_err5=12
declare -ir s_err6=13
declare -ir s_err7=14
declare -ir s_err8=15
declare -ir s_err9=16
declare -ir s_disabled=17
declare -ir s_off_broken=18
declare -ir s_off_usable=19
declare -ir s_maybe_bound=20
