#!/usr/bin/env bash

set -euo pipefail

source /tmp/scripts/exports.sh

# Function to print a centered text banner within a specified width
print_banner() {
  local term_width=80

  local text=" ${1} "        # Text to print
  local padding="$(printf '%0.1s' '='{1..600})"
  local padlen=0

  if (( ${#text} < term_width )); then
    padlen=$(( (term_width - ${#text}) / 2 ))
  fi

  printf '%*.*s%s%*.*s\n' 0 "$padlen" "$padding" "$text" 0 "$padlen" "$padding"
}

get_script_path() {
  local script_name="$1"
  local extensions=("nu" "sh" "bash")
  local base_script_path="/tmp/modules/${script_name}/${script_name}"
  local tried_scripts=()

  # See if
  if [[ -f "${base_script_path}" ]]; then
    echo "${base_script_path}"
    return 0
  fi
  tried_scripts+=("${script_name}")

  # Iterate through each extension and check if the file exists
  for ext in "${extensions[@]}"; do
    local script_path="${base_script_path}.${ext}"
    tried_scripts+=("${script_name}.${ext}")
      
    if [[ -f "$script_path" ]]; then
      # Output only the script path without extra information
      echo "$script_path"
      return 0  # Exit the function when the first matching file is found
    fi
  done

  # If no matching file was found
  echo "Failed to find scripts matching: ${tried_scripts[*]}" >&2
  return 1
}

module="$1"
params="$2"
script_path="$(get_script_path "$module")"
nushell_version="$(echo "${params}" | jq '.["nushell-version"] // empty')"

export PATH="/usr/libexec/bluebuild/nu/:$PATH"

color_string "$(print_banner "Start '${module}' Module")" "33"
chmod +x "${script_path}"

if "${script_path}" "${params}"; then
  color_string "$(print_banner  "End '${module}' Module")" "32"

else
  color_string "$(print_banner "Failed '${module}' Module")" "31"
  exit 1
fi

if command -v ostree > /dev/null; then
  ostree container commit
fi
