#!/usr/bin/env bash
# ==============================================================================
# KeluargaMart Platform — VPS Management Helper (Dual Stack: Prod + Staging)
# Hostinger KVM 2 VPS (76.13.223.113)
# ==============================================================================
set -euo pipefail

PROD_DIR="/opt/stacks/keluargamart-backend"
STG_DIR="/opt/stacks/keluargamart-stg"

usage() {
  cat << EOF
Usage: $0 {prod|stg|all} {status|stats|logs|pull|restart|up|backup} [service]

Examples:
  $0 all status         # Show status of all prod and stg containers
  $0 all stats          # Show RAM & CPU usage of all containers
  $0 stg logs backend   # Tail logs for staging backend
  $0 stg restart b2b    # Restart staging b2b
  $0 prod logs backend  # Tail logs for production backend
  $0 stg backup         # Backup staging PostgreSQL DB
  $0 prod backup        # Backup production PostgreSQL DB
EOF
  exit 1
}

TARGET="${1:-all}"
ACTION="${2:-status}"
SERVICE="${3:-}"

run_compose() {
  local dir="$1"
  local act="$2"
  local svc="$3"

  case "$act" in
    status|ps)
      cd "$dir" && podman-compose --in-pod false -f docker-compose.yml ps
      ;;
    logs)
      cd "$dir" && podman-compose --in-pod false -f docker-compose.yml logs -f --tail=50 $svc
      ;;
    pull)
      cd "$dir" && podman-compose --in-pod false -f docker-compose.yml pull
      ;;
    restart)
      cd "$dir" && podman-compose --in-pod false -f docker-compose.yml restart $svc
      ;;
    up)
      cd "$dir" && podman-compose --in-pod false -f docker-compose.yml up -d $svc
      ;;
    down)
      cd "$dir" && podman-compose --in-pod false -f docker-compose.yml down
      ;;
    *)
      usage
      ;;
  esac
}

case "$TARGET" in
  prod)
    if [ "$ACTION" = "backup" ]; then
      mkdir -p /root/backups/keluargamart
      FILE="/root/backups/keluargamart/keluargamart_prod_$(date +%Y%m%d_%H%M%S).sql.gz"
      podman exec -i keluargamart-postgres pg_dump -U erp -d erp | gzip > "$FILE"
      echo "Production backup saved to $FILE"
    elif [ "$ACTION" = "stats" ]; then
      podman stats --no-stream keluargamart-backend keluargamart-erp keluargamart-pos keluargamart-b2b keluargamart-nextreport keluargamart-postgres keluargamart-redis
    else
      run_compose "$PROD_DIR" "$ACTION" "$SERVICE"
    fi
    ;;

  stg)
    if [ "$ACTION" = "backup" ]; then
      mkdir -p /root/backups/keluargamart
      FILE="/root/backups/keluargamart/keluargamart_stg_$(date +%Y%m%d_%H%M%S).sql.gz"
      podman exec -i km-stg-postgres pg_dump -U erp -d erp | gzip > "$FILE"
      echo "Staging backup saved to $FILE"
    elif [ "$ACTION" = "stats" ]; then
      podman stats --no-stream km-stg-backend km-stg-erp km-stg-pos km-stg-b2b km-stg-nextreport km-stg-postgres km-stg-redis
    else
      run_compose "$STG_DIR" "$ACTION" "$SERVICE"
    fi
    ;;

  all)
    case "$ACTION" in
      status|ps)
        echo "=== PRODUCTION CONTAINERS ==="
        cd "$PROD_DIR" && podman-compose --in-pod false -f docker-compose.yml ps
        echo ""
        echo "=== STAGING CONTAINERS ==="
        cd "$STG_DIR" && podman-compose --in-pod false -f docker-compose.yml ps
        ;;
      stats)
        podman stats --no-stream keluargamart-backend keluargamart-erp keluargamart-pos keluargamart-b2b keluargamart-nextreport keluargamart-postgres keluargamart-redis \
          km-stg-backend km-stg-erp km-stg-pos km-stg-b2b km-stg-nextreport km-stg-postgres km-stg-redis
        ;;
      *)
        usage
        ;;
    esac
    ;;

  *)
    usage
    ;;
esac
