#!/usr/bin/env bash
# Deploy Cuppa to Kubernetes (AWS EKS or local)
# Usage: ./deploy/scripts/deploy-k8s.sh [aws-region|gcp] [cluster-name] [image-tag]
set -euo pipefail

ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
PLATFORM="${1:-aws}"
CLUSTER="${2:-}"
TAG="${3:-latest}"
NAMESPACE="cuppa"

if [[ "$PLATFORM" != "gcp" && -z "$CLUSTER" ]]; then
  echo "Usage: $0 <aws-region> <eks-cluster-name> [tag]"
  echo "   or: $0 gcp <gke-cluster-name> [tag]"
  exit 1
fi

if [[ "$PLATFORM" != "gcp" ]]; then
  AWS_REGION="$PLATFORM"
  echo "→ Configuring kubectl for EKS cluster $CLUSTER in $AWS_REGION"
  aws eks update-kubeconfig --region "$AWS_REGION" --name "$CLUSTER"
  WEB_IMAGE="${ECR_WEB_IMAGE:-$(aws sts get-caller-identity --query Account --output text).dkr.ecr.${AWS_REGION}.amazonaws.com/cuppa-production-web:${TAG}}"
  WORKER_IMAGE="${ECR_WORKER_IMAGE:-$(aws sts get-caller-identity --query Account --output text).dkr.ecr.${AWS_REGION}.amazonaws.com/cuppa-production-worker:${TAG}}"
else
  echo "→ Using GKE cluster $CLUSTER"
  WEB_IMAGE="${GCP_WEB_IMAGE:-${ARTIFACT_REGISTRY}/cuppa-web:${TAG}}"
  WORKER_IMAGE="${GCP_WORKER_IMAGE:-${ARTIFACT_REGISTRY}/cuppa-worker:${TAG}}"
fi

echo "→ Applying namespace + config"
kubectl apply -f "$ROOT/deploy/k8s/namespace.yaml"

if [[ -f "$ROOT/deploy/k8s/secrets.yaml" ]]; then
  kubectl apply -f "$ROOT/deploy/k8s/secrets.yaml"
else
  echo "⚠ deploy/k8s/secrets.yaml not found — copy from secrets.example.yaml"
fi

kubectl apply -f "$ROOT/deploy/k8s/configmap.yaml"

echo "→ Deploying web ($WEB_IMAGE) and worker ($WORKER_IMAGE)"
export WEB_IMAGE WORKER_IMAGE
envsubst '${WEB_IMAGE} ${WORKER_IMAGE}' < "$ROOT/deploy/k8s/web-deployment.yaml" | kubectl apply -f -
envsubst '${WEB_IMAGE} ${WORKER_IMAGE}' < "$ROOT/deploy/k8s/worker-deployment.yaml" | kubectl apply -f -

kubectl apply -f "$ROOT/deploy/k8s/web-service.yaml"
kubectl apply -f "$ROOT/deploy/k8s/hpa-web.yaml"
kubectl apply -f "$ROOT/deploy/k8s/hpa-worker.yaml"

if [[ -f "$ROOT/deploy/k8s/ingress-aws.yaml" ]]; then
  kubectl apply -f "$ROOT/deploy/k8s/ingress-aws.yaml"
else
  kubectl apply -f "$ROOT/deploy/k8s/ingress.yaml"
fi

echo "→ Waiting for rollouts"
kubectl rollout status deployment/cuppa-web -n "$NAMESPACE" --timeout=300s
kubectl rollout status deployment/cuppa-worker -n "$NAMESPACE" --timeout=300s

echo "✓ Deploy complete"
kubectl get pods,svc,ingress -n "$NAMESPACE"
