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

# Get the directory where this script is located
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_DIR="$SCRIPT_DIR"

BIN_SERVER="rust-cache"
BIN_CLI="rust-cache-cli"
TARGET_SERVER="$PROJECT_DIR/target/release/$BIN_SERVER"
TARGET_CLI="$PROJECT_DIR/target/release/$BIN_CLI"
INSTALL_DIR="$HOME/.local/bin"
INSTALL_SERVER="$INSTALL_DIR/$BIN_SERVER"
INSTALL_CLI="$INSTALL_DIR/$BIN_CLI"

if [ ! -f "$TARGET_SERVER" ] || [ ! -f "$TARGET_CLI" ]; then
  echo "Release binaries not found, building in release mode..."
  echo "Building in release mode..."
  cd "$PROJECT_DIR"
  cargo build --release
fi

mkdir -p "$INSTALL_DIR"
cp "$TARGET_SERVER" "$INSTALL_SERVER"
cp "$TARGET_CLI" "$INSTALL_CLI"
chmod +x "$INSTALL_SERVER" "$INSTALL_CLI"

echo "Installed $BIN_SERVER to $INSTALL_SERVER"
echo "Installed $BIN_CLI to $INSTALL_CLI"

# Install system-wide config file
CONFIG_SOURCE="$PROJECT_DIR/rust-cache.toml"
CONFIG_DIR="/etc/rust-cache"
CONFIG_FILE="$CONFIG_DIR/rust-cache.conf"

if [ -f "$CONFIG_SOURCE" ]; then
  # Check if we can write to /etc directly or have sudo access
  if [ -w /etc ]; then
    mkdir -p "$CONFIG_DIR"
    cp "$CONFIG_SOURCE" "$CONFIG_FILE"
    echo "Installed system config to $CONFIG_FILE"
  elif sudo -n true 2>/dev/null; then
    # Sudo access available (password cached)
    sudo mkdir -p "$CONFIG_DIR"
    sudo cp "$CONFIG_SOURCE" "$CONFIG_FILE"
    echo "Installed system config to $CONFIG_FILE"
  else
    # Try sudo anyway (will prompt if needed)
    if sudo mkdir -p "$CONFIG_DIR" 2>/dev/null && sudo cp "$CONFIG_SOURCE" "$CONFIG_FILE" 2>/dev/null; then
      echo "Installed system config to $CONFIG_FILE"
    else
      echo "Note: Could not install system config to $CONFIG_FILE (requires sudo)"
      echo "      Run 'sudo ./install.sh' or manually copy:"
      echo "      sudo cp $CONFIG_SOURCE $CONFIG_FILE"
    fi
  fi
else
  echo "Warning: Config template not found at $CONFIG_SOURCE"
fi

# Install systemd service file
SERVICE_SOURCE="$PROJECT_DIR/rust-cache.service.example"
SERVICE_FILE="/etc/systemd/system/rust-cache.service"

if [ -f "$SERVICE_SOURCE" ]; then
  if [ -w /etc/systemd/system ] 2>/dev/null; then
    cp "$SERVICE_SOURCE" "$SERVICE_FILE"
    systemctl daemon-reload 2>/dev/null || true
    echo "Installed systemd service to $SERVICE_FILE"
  elif sudo -n true 2>/dev/null; then
    # Sudo access available (password cached)
    sudo cp "$SERVICE_SOURCE" "$SERVICE_FILE"
    sudo systemctl daemon-reload
    echo "Installed systemd service to $SERVICE_FILE"
  else
    # Try sudo anyway (will prompt if needed)
    if sudo cp "$SERVICE_SOURCE" "$SERVICE_FILE" 2>/dev/null && sudo systemctl daemon-reload 2>/dev/null; then
      echo "Installed systemd service to $SERVICE_FILE"
    else
      echo "Note: Could not install systemd service (requires sudo)"
      echo "      Run manually:"
      echo "      sudo cp $SERVICE_SOURCE $SERVICE_FILE"
      echo "      sudo systemctl daemon-reload"
    fi
  fi
else
  echo "Warning: Service template not found at $SERVICE_SOURCE"
fi

echo ""
echo "Make sure $INSTALL_DIR is in your PATH, e.g.:"
echo '  export PATH="$HOME/.local/bin:$PATH"'
echo ""
echo "To enable and start the service:"
echo "  sudo systemctl enable rust-cache"
echo "  sudo systemctl start rust-cache"
echo ""
echo "To restart after config changes:"
echo "  sudo systemctl restart rust-cache"


