#!/usr/bin/env bash
set -euo pipefail

HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

KEY_PATH="${KEY_PATH:-$HERE/key.pem}"
REMOTE_USER="${REMOTE_USER:-root}"
REMOTE_HOST="${REMOTE_HOST:-}"  # e.g. 47.93.149.226
REMOTE_DIR="${REMOTE_DIR:-/root/autosso}"

usage() {
  cat <<'EOF'
Usage:
  ./upload.sh <ip> [files...]

Examples:
  ./upload.sh 47.93.149.226
  ./upload.sh 47.93.149.226 autosso 001_create_tables.sql
  REMOTE_DIR=/root/autosso ./upload.sh 47.93.149.226 config.yaml

Notes:
  - Uses ./key.pem by default (override with KEY_PATH=/path/to/key.pem)
  - Default files (if none specified): autosso 001_create_tables.sql
EOF
}

if [[ "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then
  usage
  exit 0
fi

if [[ -z "${REMOTE_HOST}" ]]; then
  if [[ $# -lt 1 ]]; then
    echo "Error: missing <ip>" >&2
    usage >&2
    exit 2
  fi
  REMOTE_HOST="$1"
  shift
fi

if [[ ! -f "$KEY_PATH" ]]; then
  echo "Error: key not found: $KEY_PATH" >&2
  exit 2
fi

# Ensure key permissions are acceptable to ssh
chmod 600 "$KEY_PATH" 2>/dev/null || true

# Default files
if [[ $# -eq 0 ]]; then
  set -- "$HERE/autosso" "$HERE/001_create_tables.sql"
fi

# Resolve relative paths from script directory (so you can run from anywhere)
FILES=( )
for f in "$@"; do
  if [[ -f "$f" ]]; then
    FILES+=("$f")
  elif [[ -f "$HERE/$f" ]]; then
    FILES+=("$HERE/$f")
  else
    echo "Error: file not found: $f" >&2
    exit 2
  fi
done

SSH_BASE=(ssh -i "$KEY_PATH" -o IdentitiesOnly=yes -o ConnectTimeout=10)
SCP_BASE=(scp -i "$KEY_PATH" -o IdentitiesOnly=yes)

echo "Remote: ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}"
echo "Key:    ${KEY_PATH}"
echo "Files:  ${FILES[*]}"

"${SSH_BASE[@]}" "${REMOTE_USER}@${REMOTE_HOST}" "mkdir -p '$REMOTE_DIR'"
"${SCP_BASE[@]}" "${FILES[@]}" "${REMOTE_USER}@${REMOTE_HOST}:$REMOTE_DIR/"

echo "Done."
