#!/bin/bash

# NMDPRA Dashboard - VPS Deployment Helper
# Use this after initial setup for updates and maintenance

set -e

RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

if [[ $EUID -ne 0 ]]; then
   echo -e "${RED}This script must be run as root${NC}"
   exit 1
fi

show_menu() {
    echo ""
    echo "======================================"
    echo "NMDPRA Dashboard Deployment Menu"
    echo "======================================"
    echo "1. Check service status"
    echo "2. View service logs"
    echo "3. Restart services"
    echo "4. Update all applications"
    echo "5. Restart Nginx"
    echo "6. Backup databases"
    echo "7. Check system resources"
    echo "8. Reset everything (clean slate)"
    echo "9. Exit"
    echo "======================================"
    echo -n "Select option: "
}

check_status() {
    echo -e "${YELLOW}Service Status:${NC}"
    systemctl status nmdpr-consumption-backend --no-pager | grep -E "Active|Main PID"
    systemctl status nmdpr-consumption-frontend --no-pager | grep -E "Active|Main PID"
    systemctl status nmdpr-supply-backend --no-pager | grep -E "Active|Main PID"
    systemctl status nmdpr-central-dashboard --no-pager | grep -E "Active|Main PID"
    echo ""
    echo -e "${YELLOW}Port status:${NC}"
    netstat -tlnp 2>/dev/null | grep -E "5000|5173|8000|4000" || echo "Services not listening"
}

view_logs() {
    echo -e "${YELLOW}Select service to view logs:${NC}"
    echo "1. Consumption Backend"
    echo "2. Consumption Frontend"
    echo "3. Supply Backend"
    echo "4. Central Dashboard"
    echo "5. Nginx"
    echo -n "Select: "
    read log_choice

    case $log_choice in
        1) journalctl -u nmdpr-consumption-backend -n 100 -f ;;
        2) journalctl -u nmdpr-consumption-frontend -n 100 -f ;;
        3) journalctl -u nmdpr-supply-backend -n 100 -f ;;
        4) journalctl -u nmdpr-central-dashboard -n 100 -f ;;
        5) tail -f /var/log/nginx/error.log ;;
        *) echo -e "${RED}Invalid option${NC}" ;;
    esac
}

restart_services() {
    echo -e "${YELLOW}Restarting services...${NC}"
    systemctl restart nmdpr-consumption-backend
    sleep 2
    systemctl restart nmdpr-consumption-frontend
    sleep 2
    systemctl restart nmdpr-supply-backend
    sleep 2
    systemctl restart nmdpr-central-dashboard
    echo -e "${GREEN}✓ All services restarted${NC}"
}

update_apps() {
    echo -e "${YELLOW}Updating applications...${NC}"
    cd /opt/centraldash

    # Consumption
    echo "Updating Consumption App..."
    cd nmdpr_consumption
    git pull origin main
    cd backend && npm ci --legacy-peer-deps && cd ..
    cd frontend && npm ci --legacy-peer-deps && cd ../..

    # Supply
    echo "Updating Supply App..."
    cd nmdpr_supply
    git pull origin main
    if [ -f "backend/requirements.txt" ]; then
        pip3 install -r backend/requirements.txt
    fi
    cd ..

    # Dashboard
    echo "Updating Central Dashboard..."
    cd dashboard
    git pull origin main
    npm ci --legacy-peer-deps
    cd ..

    echo -e "${GREEN}✓ Applications updated${NC}"
    echo -e "${YELLOW}Restarting services...${NC}"
    restart_services
}

restart_nginx() {
    echo -e "${YELLOW}Testing Nginx configuration...${NC}"
    nginx -t
    echo -e "${YELLOW}Restarting Nginx...${NC}"
    systemctl restart nginx
    echo -e "${GREEN}✓ Nginx restarted${NC}"
}

backup_databases() {
    echo -e "${YELLOW}Backing up databases...${NC}"

    BACKUP_DIR="/opt/centraldash/backups/$(date +%Y%m%d_%H%M%S)"
    mkdir -p "$BACKUP_DIR"

    CONS_ENV="/opt/centraldash/nmdpr_consumption/backend/.env"
    SUPPLY_ENV="/opt/centraldash/nmdpr_supply/backend/.env"
    if [ -f "$CONS_ENV" ]; then
        set -a
        # shellcheck disable=SC1090
        . "$CONS_ENV"
        set +a
        mysqldump -h "${MYSQL_HOST:-127.0.0.1}" -P "${MYSQL_PORT:-3306}" -u "${MYSQL_USER:-nmdpr}" \
          -p"${MYSQL_PASSWORD}" --single-transaction "${MYSQL_DATABASE:-nmdpr_consumption}" \
          > "$BACKUP_DIR/nmdpr_consumption.sql" && echo -e "${GREEN}✓ Consumption MySQL backed up${NC}"
    fi
    if [ -f "$SUPPLY_ENV" ]; then
        set -a
        # shellcheck disable=SC1090
        . "$SUPPLY_ENV"
        set +a
        mysqldump -h "${MYSQL_HOST:-127.0.0.1}" -P "${MYSQL_PORT:-3306}" -u "${MYSQL_USER:-nmdpr}" \
          -p"${MYSQL_PASSWORD}" --single-transaction "${MYSQL_DATABASE:-nmdpr_supply}" \
          > "$BACKUP_DIR/nmdpr_supply.sql" && echo -e "${GREEN}✓ Supply MySQL backed up${NC}"
    fi

    if [ -f "/opt/centraldash/nmdpr_consumption/backend/nmdpr.db" ]; then
        cp /opt/centraldash/nmdpr_consumption/backend/nmdpr.db "$BACKUP_DIR/nmdpr.db"
        echo -e "${GREEN}✓ Consumption SQLite snapshot copied${NC}"
    fi
    if [ -f "/opt/centraldash/nmdpr_supply/backend/nmdpra.db" ]; then
        cp /opt/centraldash/nmdpr_supply/backend/nmdpra.db "$BACKUP_DIR/nmdpra.db"
        echo -e "${GREEN}✓ Supply SQLite snapshot copied${NC}"
    fi

    echo -e "${GREEN}✓ Backups saved to: $BACKUP_DIR${NC}"
    ls -lh "$BACKUP_DIR"
}

check_resources() {
    echo -e "${YELLOW}System Resources:${NC}"
    echo ""
    echo "Memory usage:"
    free -h | head -2
    echo ""
    echo "Disk usage:"
    df -h | grep -E "^/|Filesystem"
    echo ""
    echo "Centraldash directory size:"
    du -sh /opt/centraldash
    echo ""
    echo "Logs directory size:"
    du -sh /var/log/nmdpr
    echo ""
    echo "Process resources:"
    ps aux | grep -E "node|python|nginx" | grep -v grep | awk '{print $1, $2, $4, $6, $11}'
}

reset_everything() {
    echo -e "${RED}WARNING: This will stop all services and delete databases!${NC}"
    echo -n "Type 'yes' to confirm: "
    read confirm

    if [ "$confirm" != "yes" ]; then
        echo -e "${YELLOW}Cancelled${NC}"
        return
    fi

    echo -e "${YELLOW}Stopping services...${NC}"
    systemctl stop nmdpr-consumption-backend nmdpr-consumption-frontend nmdpr-supply-backend nmdpr-central-dashboard

    echo -e "${YELLOW}Removing old installations...${NC}"
    rm -rf /opt/centraldash/*/node_modules
    rm -rf /opt/centraldash/nmdpr_consumption/backend/nmdpr.db
    rm -rf /opt/centraldash/nmdpr_supply/backend/nmdpra.db
    rm -rf /opt/centraldash/*/__pycache__
    rm -rf /opt/centraldash/uploads/*

    echo -e "${YELLOW}Reinstalling dependencies...${NC}"
    cd /opt/centraldash/nmdpr_consumption
    cd backend && npm ci --legacy-peer-deps && cd ..
    cd frontend && npm ci --legacy-peer-deps && cd ../..

    cd nmdpr_supply
    if [ -f "backend/requirements.txt" ]; then
        pip3 install -r backend/requirements.txt
    fi
    cd ..

    cd dashboard
    npm ci --legacy-peer-deps
    cd ..

    echo -e "${YELLOW}Initializing databases...${NC}"
    cd /opt/centraldash/nmdpr_consumption/backend
    node db/seed.js 2>/dev/null || echo "Database seeding completed"

    cd /opt/centraldash/nmdpr_supply/backend
    python3 -c "from app.database import Base, engine; Base.metadata.create_all(bind=engine)" 2>/dev/null || echo "Database creation completed"

    echo -e "${YELLOW}Starting services...${NC}"
    systemctl start nmdpr-consumption-backend
    sleep 2
    systemctl start nmdpr-consumption-frontend
    sleep 2
    systemctl start nmdpr-supply-backend
    sleep 2
    systemctl start nmdpr-central-dashboard

    echo -e "${GREEN}✓ Everything reset and restarted${NC}"
}

# Main loop
while true; do
    show_menu
    read choice

    case $choice in
        1) check_status ;;
        2) view_logs ;;
        3) restart_services ;;
        4) update_apps ;;
        5) restart_nginx ;;
        6) backup_databases ;;
        7) check_resources ;;
        8) reset_everything ;;
        9) echo -e "${GREEN}Goodbye!${NC}"; exit 0 ;;
        *) echo -e "${RED}Invalid option${NC}" ;;
    esac
done
