#!/usr/bin/env bash
# ============================================================
#  TA-ATS one-shot deploy for ats.indovisionconsultancy.in
#  Backend = systemd ats.service (:8000) | MCP (:9000) | Frontend (:3000)
#  Run:  bash deploy_server.sh
# ============================================================
set -u
PROJ=/home/indovisionconsul/public_html/ats.indovisionconsultancy.in
MCP=/home/indovisionconsul/public_html/auth_mcp
LOG=$PROJ/logs; PIDS=$PROJ/.pids
mkdir -p "$LOG" "$PIDS"

echo "==================== [1/5] BACKEND: migrate + seed ===================="
cd "$PROJ/backend"
export DJANGO_SETTINGS_MODULE=config.settings.prod
PY=./venv/bin/python
$PY manage.py migrate
$PY seed_demo_users.py
$PY update_permissions.py
$PY add_master_data_menus.py
$PY add_master_skills_menu.py
$PY add_reports_menu.py
[ -f add_notification_templates_menu.py ] && $PY add_notification_templates_menu.py || echo "(notif tpl seeder not present - skipped)"
$PY seed_india_data.py
$PY seed_world_data.py
# make the (older) pipeline seeder idempotent: align existing stage codes first
$PY manage.py shell <<'PYEOF'
from apps.pipeline.models import PipelineStage
codes = {"Contacted":"contacted","Candidate Responded":"candidate-responded","Screening":"screening",
 "Interview Scheduled":"interview-scheduled","Interviewed":"interviewed","Offer Extended":"offer-extended",
 "Offer Accepted":"offer-accepted","Joined":"joined","Rejected":"rejected","Candidate Declined":"candidate-declined"}
for n,c in codes.items():
    PipelineStage.objects.filter(name=n).update(code=c)
print("pipeline stage codes aligned")
PYEOF
$PY seed_master_defaults.py || echo "(master_defaults partial - harmless, data exists)"

echo "==================== [2/5] MCP auth store seed ===================="
( cd "$MCP" && ./venv/bin/python -c "import db; db.ensure_schema()" )

echo "==================== [3/5] FRONTEND: deps + WS fix + build ===================="
cd "$PROJ/frontend"
[ -f .env.production ] || echo 'NEXT_PUBLIC_API_URL=https://ats.indovisionconsultancy.in/api/v1' > .env.production
npm install
npm install xlsx
# HTTPS pages must use wss:// (not ws://:8000) or the socket crashes the page
sed -i "s|ws://\${window.location.hostname}:8000/api/ws/activity|wss://\${window.location.host}/api/ws/activity|g" \
  src/components/dashboard/AdminDashboard.tsx src/components/Header.tsx
rm -rf .next
if npm run build > "$LOG/frontend-build.log" 2>&1; then
  echo "FRONTEND BUILD: PASS"
else
  echo "FRONTEND BUILD: FAIL - last 25 lines:"; tail -n 25 "$LOG/frontend-build.log"; exit 1
fi

echo "==================== [4/5] RESTART services ===================="
# Django backend (managed by systemd) on :8000
systemctl restart ats.service
# MCP on :9000
pkill -f "auth_mcp/server.py" 2>/dev/null; sleep 1; fuser -k 9000/tcp 2>/dev/null; sleep 1
( cd "$MCP" && setsid nohup ./venv/bin/python server.py > "$LOG/mcp.log" 2>&1 & echo $! > "$PIDS/mcp.pid" )
# Frontend on :3000
pkill -f next-server 2>/dev/null; pkill -f "next start" 2>/dev/null; sleep 2; fuser -k 3000/tcp 2>/dev/null; sleep 2
( cd "$PROJ/frontend" && setsid nohup npm start > "$LOG/frontend.log" 2>&1 & echo $! > "$PIDS/frontend.pid" )
sleep 6

echo "==================== [5/5] HEALTH ===================="
for p in 9000 8000 3000; do ss -ltn | grep -q ":$p " && echo "  OK  port $p" || echo "  !!  port $p DOWN"; done
echo -n "  login  -> "; curl -s -o /dev/null -w "%{http_code}\n" -X POST \
  https://ats.indovisionconsultancy.in/api/v1/auth/login/ \
  -H "Content-Type: application/json" -d '{"email":"ats@admin.com","password":"ats@2468"}'
echo -n "  dash   -> "; curl -s -o /dev/null -w "%{http_code}\n" https://ats.indovisionconsultancy.in/dashboard
echo
echo "Done. Hard-refresh (Ctrl+Shift+R) https://ats.indovisionconsultancy.in/login"
echo "Login: ats@admin.com / ats@2468"
