#!/bin/bash
set -e

# Generate dev and uat CircleCI configs for all 35 redtag services
# Usage: bash scripts/generate-redtag-dev-uat.sh

BASE_DIR="$(cd "$(dirname "$0")/.." && pwd)"
TMPL_DIR="${BASE_DIR}/scripts/redtag-prod-templates"

# All services deploy to namespace "redtag" in dev and uat
SERVICES=(
  "tbi-rlv-booking-path|tbi-rlv-booking-path|php-webpack"
  "tbi-rlv-sales-agent-booking-path|tbi-rlv-booking-path|php-webpack"
  "tbi-rlv-market-booking-path|tbi-rlv-booking-path|php-webpack"
  "tbi-rlv-affiliate-booking-path|tbi-rlv-booking-path|php-webpack"
  "tbi-itravel-booking-path|tbi-rlv-booking-path|php-webpack"
  "tbi-sunquest-booking-path|tbi-rlv-booking-path|php-webpack"
  "tbi-his-traveljapan-booking-path|tbi-rlv-booking-path|php-webpack"
  "tbi-flights-booking-path|tbi-rlv-booking-path|php-webpack"
  "tbi-rlv-dynamic|tbi-rlv-dynamic-path|php-webpack"
  "tbi-itravel-dynamic-path|tbi-rlv-dynamic-path|php-webpack"
  "tbi-sunquest-dynamic-path|tbi-rlv-dynamic-path|php-webpack"
  "tbi-his-traveljapan-dynamic-path|tbi-rlv-dynamic-path|php-webpack"
  "tbi-admin-redlabel-ca|tbi-admin-redlabel-ca|php70"
  "tbi-admin-redlabel-cron|tbi-admin-redlabel-ca|php70"
  "tbi-admin-redlabel-cron-2|tbi-admin-redlabel-ca|php70"
  "tbi-admin-redlabel-cron-3|tbi-admin-redlabel-ca|php70"
  "tbi-itravel2000-com|tbi-itravel2000-com|php70"
  "tbi-itravel2000-cron|tbi-itravel2000-com|php70"
  "tbi-itravel2000-cron-2|tbi-itravel2000-com|php70"
  "tbi-itravel2000-cron-3|tbi-itravel2000-com|php70"
  "tbi-itravel2000-cron-4|tbi-itravel2000-com|php70"
  "tbi-redtag-cms|tbi-redtag-cms|php"
  "tbi-rlv-attraction-frontend|tbi-rlv-attraction-frontend|node"
  "tbi-rlv-frontend-service|tbi-rlv-frontend-service|node"
  "tbi-rlv-giftcard-service|tbi-rlv-giftcard-service|node"
  "tbi-rlv-hotel-content-service|tbi-rlv-hotel-content-service|php"
  "tbi-rlv-insurance-service|tbi-rlv-insurance-service|php"
  "tbi-rlv-attraction-bff-service|tbi-rlv-attraction-bff-service|node"
  "tbi-rlv-petro-points-service|tbi-rlv-petro-points-service|node"
  "tbi-rlv-vacations-bff-service|tbi-rlv-vacations-bff-service|node"
  "tbi-sunquest-ca|tbi-sunquest-ca|php73"
  "tbi-his-traveljapan-com|tbi-his-traveljapan-com|php73"
  "tbi-flights-ca|tbi-flights-ca|php73"
  "tbi-travelexperts-ca|tbi-travelexperts-ca|php"
  "tbi-travelexperts-redtag-ca|tbi-travelexperts-redtag-ca|php"
)

stamp_template() {
  local tmpl="$1" svc="$2" ns="$3" ecr="$4" tech="$5" env="$6" branch="$7"

  local lint_image lock_file install_cmd cache_path lint_cmd test_cmd build_cmd
  case "$tech" in
    node)
      lint_image="cimg/node:20.4"; lock_file="package-lock.json"; install_cmd="npm ci"
      cache_path="node_modules"; lint_cmd="npm run lint || echo Linting completed with warnings"
      test_cmd="npm run test || echo Tests completed"; build_cmd="npm run build" ;;
    *)
      lint_image="cimg/php:8.0"; lock_file="composer.lock"; install_cmd="composer install --no-interaction"
      cache_path="vendor"; lint_cmd="echo PHP linting skipped"
      test_cmd="echo PHP tests skipped"; build_cmd="echo Build validation skipped" ;;
  esac

  python3 -c "
import sys
with open('$tmpl') as f:
    content = f.read()
for k, v in {
    '__SERVICE_NAME__': '$svc', '__NAMESPACE__': '$ns', '__ECR_NAME__': '$ecr',
    '__ENV__': '$env', '__BRANCH__': '$branch',
    '__LINT_IMAGE__': '$lint_image', '__LOCK_FILE__': '$lock_file',
    '__INSTALL_CMD__': '$install_cmd', '__CACHE_PATH__': '$cache_path',
    '__LINT_CMD__': '$lint_cmd', '__TEST_CMD__': '$test_cmd', '__BUILD_CMD__': '$build_cmd',
}.items():
    content = content.replace(k, v)
print(content, end='')
"
}

generate_env() {
  local env="$1" branch="$2" ns="redtag"
  local out_dir="${BASE_DIR}/${env}"

  echo ""
  echo "=== Generating ${env} configs (branch: ${branch}, namespace: ${ns}) ==="

  for entry in "${SERVICES[@]}"; do
    IFS='|' read -r svc ecr tech <<< "$entry"
    local svc_dir="${out_dir}/${svc}"

    echo "  → ${svc}"

    mkdir -p "${svc_dir}/.circleci" "${svc_dir}/docker" "${svc_dir}/scripts" \
             "${svc_dir}/charts/${svc}/templates" "${svc_dir}/.github/workflows"

    stamp_template "${TMPL_DIR}/config-nonprod.yml.tmpl" "$svc" "$ns" "$ecr" "$tech" "$env" "$branch" > "${svc_dir}/.circleci/config.yml"
    stamp_template "${TMPL_DIR}/deploy-services-nonprod.sh.tmpl" "$svc" "$ns" "$ecr" "$tech" "$env" "$branch" > "${svc_dir}/scripts/deploy-services.sh"
    stamp_template "${TMPL_DIR}/setup-kubectl-nonprod.sh.tmpl" "$svc" "$ns" "$ecr" "$tech" "$env" "$branch" > "${svc_dir}/scripts/setup-kubectl.sh"
    stamp_template "${TMPL_DIR}/manage-secrets.yml.tmpl" "$svc" "$ns" "$ecr" "$tech" "$env" "$branch" > "${svc_dir}/.github/workflows/manage-secrets.yml"
    stamp_template "${TMPL_DIR}/Chart.yaml.tmpl" "$svc" "$ns" "$ecr" "$tech" "$env" "$branch" > "${svc_dir}/charts/${svc}/Chart.yaml"

    chmod +x "${svc_dir}/scripts/"*.sh

    cat > "${svc_dir}/charts/${svc}/values.yaml" << 'EOF'
# Default values - actual values from tbi-environments
EOF

    # Copy chart templates from redtag-prod (identical Helm templates)
    local prod_templates="${BASE_DIR}/redtag-prod/${svc}/charts/${svc}/templates"
    if [ -d "$prod_templates" ]; then
      cp "${prod_templates}"/*.yaml "${svc_dir}/charts/${svc}/templates/"
    fi

    # Copy Dockerfile from redtag-prod
    local prod_dockerfile="${BASE_DIR}/redtag-prod/${svc}/docker/Dockerfile"
    if [ -f "$prod_dockerfile" ]; then
      cp "$prod_dockerfile" "${svc_dir}/docker/Dockerfile"
    fi

    # README
    cat > "${svc_dir}/README.md" << EOF
# ${svc} (${env})

CircleCI pipeline for ${svc} in ${env} environment.

- **Namespace**: ${ns}
- **Cluster**: ${env}
- **S3 Bucket**: tbi-charts
- **Branch**: ${branch}
- **ECR Image**: ${ecr}
EOF

  done

  echo "✅ Generated ${env} configs for ${#SERVICES[@]} services"
}

generate_env "dev" "develop"
generate_env "uat" "uat"

echo ""
echo "=== Summary ==="
for env in dev uat; do
  count=$(ls -d ${BASE_DIR}/${env}/tbi-rlv-* ${BASE_DIR}/${env}/tbi-itravel* ${BASE_DIR}/${env}/tbi-admin-* ${BASE_DIR}/${env}/tbi-redtag-cms ${BASE_DIR}/${env}/tbi-sunquest-* ${BASE_DIR}/${env}/tbi-his-* ${BASE_DIR}/${env}/tbi-flights-* ${BASE_DIR}/${env}/tbi-travelexperts-* 2>/dev/null | wc -l)
  echo "  ${env}: ${count} service directories"
done
