#!/usr/bin/env bash
# Restructure testgiftmarketplace into etc/srv/var/log/backups layout.
# ONLY touches /home/aibit/public_html/testgiftmarketplace.aibit.services
# Does NOT modify giftmarketplace.aibit.services, marketplace.aibit.services, or other vhosts.
set -euo pipefail

BASE="/home/aibit/public_html/testgiftmarketplace.aibit.services"
FRONTEND="${BASE}/srv/GIFTMarketplace/frontend/current"
BACKEND="${BASE}/srv/GIFTMarketplace/backend/current"
ETC="${BASE}/etc/GIFTMarketplace"
UPLOADS="${BASE}/var/lib/GIFTMarketplace/uploads"
CACHE="${BASE}/var/lib/GIFTMarketplace/cache"
DOCS="${BASE}/var/lib/GIFTMarketplace/documents"
EXPORTS="${BASE}/var/lib/GIFTMarketplace/exports"
LOGS="${BASE}/log/GIFTMarketplace"
BACKUPS="${BASE}/backups/GIFTMarketplace"
SCRIPTS="${BASE}/srv/GIFTMarketplace/scripts"

cd "$BASE"

echo "==> Creating directory tree..."
mkdir -p "$FRONTEND" "$BACKEND" \
  "${BASE}/srv/GIFTMarketplace/frontend/releases" \
  "${BASE}/srv/GIFTMarketplace/backend/releases" \
  "$ETC" "$UPLOADS" "$CACHE" "$DOCS" "$EXPORTS" "$LOGS" "$BACKUPS" \
  "${SCRIPTS}/deploy" "${SCRIPTS}/git" "${SCRIPTS}/web" \
  "${LOGS}/apache" "${LOGS}/pm2" "${CACHE}/next"

# Upload subfolders (mirror marketplace layout for future local storage)
UPLOAD_DIRS=(
  admin admin_feature advertisement banner banner_section brand business
  business_image campaign category contact_us_image conversation delivery-man
  download_app_section download_dm_app_section download_seller_app_section
  download_user_app_image earning email_template fixed_header_image
  gallery_section header_banner header_icon highlight_section item_meta_data
  module notification order payment_modules popular_client_section product
  profile promotional_banner refund restaurant reviewer_company_image
  reviewer_image special_criteria store trust_section vendor
)
for d in "${UPLOAD_DIRS[@]}"; do
  mkdir -p "$UPLOADS/$d"
done
mkdir -p "$UPLOADS/payment_modules/gateway_image" "$UPLOADS/restaurant/cover" "$UPLOADS/store/cover"
mkdir -p "$EXPORTS/reports" "$DOCS/manuals"

# --- Frontend (Next.js app) ---
FRONTEND_ITEMS=(
  pages src public node_modules .next .next.bak-may
  package.json package-lock.json yarn.lock.bak-deploy
  next.config.js next-env.d.ts middleware.js
  jsconfig.json tsconfig.json tsconfig.tsbuildinfo
  i18next-scanner.config.js i18n-watch.js
  make_transparent.js test_validation.js test_yup.js
  marketplace-main
)

for item in "${FRONTEND_ITEMS[@]}"; do
  if [[ -e "$BASE/$item" && ! -e "$FRONTEND/$item" ]]; then
    echo "  Moving frontend: $item"
    mv "$BASE/$item" "$FRONTEND/"
  fi
done

# Remove accidental nested vhost copy (only stale .next)
if [[ -d "$BASE/giftmarketplace.aibit.services" ]]; then
  echo "  Removing stale nested giftmarketplace.aibit.services/"
  rm -rf "$BASE/giftmarketplace.aibit.services"
fi

# --- Env / config -> etc ---
for cfg in .env .npmrc; do
  if [[ -f "$BASE/$cfg" && ! -f "$ETC/$cfg" ]]; then
    echo "  Moving $cfg -> etc/GIFTMarketplace/"
    mv "$BASE/$cfg" "$ETC/"
  fi
done

# Symlink env into frontend (Next.js reads .env from project root)
if [[ -f "$ETC/.env" && ! -e "$FRONTEND/.env" ]] || [[ -L "$FRONTEND/.env" ]]; then
  ln -sfn "../../../../etc/GIFTMarketplace/.env" "$FRONTEND/.env"
fi
if [[ -f "$ETC/.npmrc" && ! -e "$FRONTEND/.npmrc" ]] || [[ -L "$FRONTEND/.npmrc" ]]; then
  ln -sfn "../../../../etc/GIFTMarketplace/.npmrc" "$FRONTEND/.npmrc"
fi

# --- Documents ---
DOC_ITEMS=(
  README.md USER_MANUAL.md
  GIFT_MARKETPLACE_WEB_COMPLETE_MANUAL.md
  GIFT_MARKETPLACE_WEB_USER_MANUAL.md
  GIFT_MARKETPLACE_WEB_WORKFLOW_MANUAL.md
  MARKETPLACE_RIDER_USER_MANUAL.md
  REALTIME_WEBSOCKET_DOCUMENTATION.md
  HIDDEN_FROM_MAIN_PREVIEW.md
  VENDOR_REGISTRATION_FIX.md
  recently-viewed.postman_collection.json
  txt.txt
)
for doc in "${DOC_ITEMS[@]}"; do
  if [[ -e "$BASE/$doc" && ! -e "$DOCS/$doc" ]]; then
    echo "  Moving doc: $doc"
    mv "$BASE/$doc" "$DOCS/"
  fi
done
if [[ -d "$BASE/User-Manual" && ! -d "$DOCS/User-Manual" ]]; then
  mv "$BASE/User-Manual" "$DOCS/manuals/"
fi

# --- Scripts ---
if [[ -f "$BASE/deploy.sh" && ! -f "${SCRIPTS}/deploy/deploy.sh" ]]; then
  mv "$BASE/deploy.sh" "${SCRIPTS}/deploy/deploy.sh"
fi
if [[ -f "$BASE/git-script.sh" && ! -f "${SCRIPTS}/git/git-script.sh" ]]; then
  mv "$BASE/git-script.sh" "${SCRIPTS}/git/git-script.sh"
fi
if [[ -f "$BASE/get_changed_files.sh" && ! -f "${SCRIPTS}/git/get_changed_files.sh" ]]; then
  mv "$BASE/get_changed_files.sh" "${SCRIPTS}/git/get_changed_files.sh"
fi

# --- Backend placeholder (API lives at marketplace.aibit.services — external) ---
if [[ ! -f "$BACKEND/README.md" ]]; then
  cat > "$BACKEND/README.md" <<'EOF'
# GIFT Marketplace Backend

The live Laravel API for GIFT Marketplace is hosted externally at
`marketplace.aibit.services` (shared backend). This directory is reserved
for a future local backend deployment using the `current` / `releases` pattern.

The Next.js frontend proxies `/api/*` and `/storage/*` to the external API
via `next.config.js` rewrites.
EOF
fi

# --- Root convenience symlinks ---
ln -sfn "${SCRIPTS}/deploy/deploy.sh" "$BASE/deploy.sh"

# --- .well-known for AutoSSL ---
mkdir -p "$BASE/.well-known/acme-challenge"
chmod 755 "$BASE/.well-known" "$BASE/.well-known/acme-challenge" 2>/dev/null || true

echo "==> Restructure complete."
