#!/bin/bash

source logging.sh

ACTION=$1

# Validation: ensure the user provides an action
if [[ "$ACTION" != "install" && "$ACTION" != "uninstall" ]]; then
  echo "Usage: $0 {install|uninstall}"
  exit 1
fi

if [ "$ACTION" == "install" ]; then
  log "Deploying Prometheus."

  kubectl create namespace monitoring --dry-run=client -o yaml | kubectl apply -f -
  kubectl config set-context --current --namespace=monitoring

  # Create directories on Multipass nodes
  for worker in worker0 worker1; do
    for dir in /mnt/data/prometheus /mnt/data/alertmanager; do
      multipass exec "$worker" -- sudo mkdir -p "$dir"
      multipass exec "$worker" -- sudo chown -R 65534:65534 "$dir"
      multipass exec "$worker" -- sudo chmod -R 775 "$dir"
    done
  done

  kubectl apply -f prometheus-pv.yaml
  kubectl apply -f alertmanager-pv.yaml

  helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
  helm repo update

  NODE_IP=$(kubectl get nodes -o wide | awk '/worker0/ {print $6}')
  PROBE_TARGET="$NODE_IP:9191"

  # Avoid duplicate appends if script is re-run
  if ! grep -q "ebpf-probe" prometheus-values.yaml; then
    cat <<EOF >> prometheus-values.yaml

extraScrapeConfigs: |
  - job_name: 'ebpf-probe'
    static_configs:
      - targets: ['$PROBE_TARGET']
EOF
  fi

  helm upgrade --install prometheus prometheus-community/prometheus -f prometheus-values.yaml
  
  log "Prometheus installation completed successfully."

elif [ "$ACTION" == "uninstall" ]; then
  log "Uninstalling Prometheus."

  helm uninstall prometheus --namespace monitoring
  kubectl delete -f alertmanager-pv.yaml --ignore-not-found
  kubectl delete -f prometheus-pv.yaml --ignore-not-found
  kubectl delete namespace monitoring
  
  log "Prometheus uninstalled."
fi