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

# Pre-installation checks for Linkerd

echo "Checking Linkerd prerequisites..."

# Check if cert-manager is installed (required for mTLS)
if ! kubectl get namespace cert-manager &> /dev/null; then
    echo "ERROR: cert-manager namespace not found"
    echo ""
    echo "Linkerd requires cert-manager for mTLS certificate management."
    echo "Install cert-manager first:"
    echo "  provisioning taskserv create cert-manager"
    exit 1
fi

# Verify cert-manager is ready
if ! kubectl get deploy -n cert-manager cert-manager &> /dev/null; then
    echo "ERROR: cert-manager deployment not found"
    echo "Ensure cert-manager is properly installed"
    exit 1
fi

# Check if cert-manager is running
READY=$(kubectl get deploy -n cert-manager cert-manager -o jsonpath='{.status.readyReplicas}' 2>/dev/null || echo "0")
if [ "$READY" = "0" ]; then
    echo "ERROR: cert-manager is not ready"
    echo "Wait for cert-manager to be ready: kubectl rollout status deployment/cert-manager -n cert-manager"
    exit 1
fi

echo "✓ cert-manager is ready"

# Check Kubernetes version (minimum 1.21)
K8S_VERSION=$(kubectl version --short 2>/dev/null | grep Server | awk '{print $3}' | sed 's/v//' || echo "0.0.0")
MAJOR=$(echo $K8S_VERSION | cut -d. -f1)
MINOR=$(echo $K8S_VERSION | cut -d. -f2)

if [ "$MAJOR" -lt 1 ] || ([ "$MAJOR" -eq 1 ] && [ "$MINOR" -lt 21 ]); then
    echo "ERROR: Kubernetes 1.21+ required, found $K8S_VERSION"
    exit 1
fi

echo "✓ Kubernetes version check passed ($K8S_VERSION)"

# Check if linkerd is already installed
if kubectl get namespace linkerd &> /dev/null; then
    echo "⚠ Linkerd namespace already exists - will be upgraded"
fi

echo ""
echo "✓ All prerequisites met - ready to install Linkerd"
