#!/usr/bin/env bash
set -euo pipefail
unset CDPATH

ROOT_DIR="$PWD"
APPS_DIR="$ROOT_DIR/apps"
TEMPLATES_DIR="$ROOT_DIR/defaults/templates"

normalize_name() {
  printf '%s' "$1" | tr '[:upper:]_' '[:lower:]-' | tr ' ' '-'
}

copy_template_tree() {
  local src="$1"
  local dst="$2"
  mkdir -p "$dst"
  cp -R "$src"/. "$dst"/
}

template_has_entry_file() {
  local dir="$1"
  [[ -f "$dir/README.md" || -f "$dir/index.md" ]]
}

read -r -p "App name (example: app-sys): " APP_NAME_RAW
APP_NAME="$(normalize_name "$APP_NAME_RAW")"

if [[ -z "$APP_NAME" ]]; then
  echo "App name is required."
  exit 1
fi

echo "Choose base template:"
echo "1) tmpl-sys"
echo "2) tmpl-games"
read -r -p "Selection [1-2]: " TEMPLATE_CHOICE

case "$TEMPLATE_CHOICE" in
  1) TEMPLATE_NAME="tmpl-sys" ;;
  2) TEMPLATE_NAME="tmpl-games" ;;
  *) echo "Invalid selection."; exit 1 ;;
esac

SRC_TEMPLATE="$TEMPLATES_DIR/$TEMPLATE_NAME"
APP_DIR="$APPS_DIR/$APP_NAME"

if [[ ! -d "$SRC_TEMPLATE" ]]; then
  echo "Template missing: $SRC_TEMPLATE"
  exit 1
fi

if ! template_has_entry_file "$SRC_TEMPLATE"; then
  echo "Template error: $SRC_TEMPLATE must contain README.md or index.md"
  exit 1
fi

if [[ -e "$APP_DIR" ]]; then
  echo "App already exists: $APP_DIR"
  exit 1
fi

mkdir -p "$APP_DIR"
copy_template_tree "$SRC_TEMPLATE" "$APP_DIR"

if [[ -f "$APP_DIR/index.md" ]]; then
  mv -- "$APP_DIR/index.md" "$APP_DIR/README.md"
fi

echo "Created app: $APP_DIR"
echo "Template used: $TEMPLATE_NAME"
