#!/bin/bash
set -e

# ============================================
# Maya Pipecat - Build, Push & Deploy Script
# Supports versioned tags for rollback capability
# ============================================

REGION="ap-south-1"
ACCOUNT_ID="878302603534"
REPO_NAME="maya-pipecat"
CLUSTER_NAME="maya-pipecat"

ECR_URI="${ACCOUNT_ID}.dkr.ecr.${REGION}.amazonaws.com/${REPO_NAME}"

# Paths
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
HISTORY_CSV="$PROJECT_ROOT/deployments/deployment_history.csv"

# Generate version tag: v{date}-{time}-{git_short_hash}
GIT_HASH=$(git rev-parse --short HEAD 2>/dev/null || echo "nogit")
GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "unknown")
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
VERSION_TAG="v${TIMESTAMP}-${GIT_HASH}"

# Allow override via argument (for rollback)
IMAGE_TAG="${1:-$VERSION_TAG}"
DEPLOY_NOTES="${2:-}"

# Get current deployed version (previous version for rollback reference)
PREVIOUS_VERSION=$(kubectl get deployment maya-pipecat -o jsonpath='{.spec.template.spec.containers[0].image}' 2>/dev/null | sed 's/.*://' || echo "none")

echo "============================================"
echo "🏗️  Maya Pipecat Deployment"
echo "============================================"
echo "📦 New Version:      ${IMAGE_TAG}"
echo "🔙 Previous Version: ${PREVIOUS_VERSION}"
echo "🔗 ECR URI:          ${ECR_URI}"
echo "📝 Git Commit:       ${GIT_HASH}"
echo "🌿 Git Branch:       ${GIT_BRANCH}"
echo "============================================"
echo ""
echo "⚠️  ROLLBACK COMMAND (if needed):"
echo "    ./deployments/k8s/rollback.sh ${PREVIOUS_VERSION}"
echo "============================================"

# ============================================
# Step 1: Build Docker Image
# ============================================
echo ""
echo "🔨 Building Docker image..."
cd "$(dirname "$0")/../.."  # Go to project root
docker build -t pipecat-server:latest  -f deployments/docker/Dockerfile .

# ============================================
# Step 2: Login to ECR
# ============================================
echo ""
echo "🔐 Logging into ECR..."
aws ecr get-login-password --region $REGION | docker login --username AWS --password-stdin ${ACCOUNT_ID}.dkr.ecr.${REGION}.amazonaws.com

# ============================================
# Step 3: Tag with version AND latest
# ============================================
echo ""
echo "🏷️  Tagging image..."
docker tag pipecat-server:latest ${ECR_URI}:${IMAGE_TAG}
docker tag pipecat-server:latest ${ECR_URI}:latest

echo "   Tagged: ${ECR_URI}:${IMAGE_TAG}"
echo "   Tagged: ${ECR_URI}:latest"

# ============================================
# Step 4: Push both tags to ECR
# ============================================
echo ""
echo "📤 Pushing to ECR..."
docker push ${ECR_URI}:${IMAGE_TAG}
docker push ${ECR_URI}:latest

# ============================================
# Step 5: Update kubeconfig
# ============================================
echo ""
echo "☸️  Updating kubeconfig..."
aws eks update-kubeconfig --name $CLUSTER_NAME --region $REGION

# ============================================
# Step 6: Deploy with specific version tag
# ============================================
echo ""
echo "🚀 Deploying to EKS with tag: ${IMAGE_TAG}..."

# Update deployment.yaml with specific version (not latest)
sed "s|image: ${ECR_URI}:.*|image: ${ECR_URI}:${IMAGE_TAG}|g" deployments/k8s/deployment.yaml | kubectl apply -f -

# ============================================
# Step 7: Wait for rollout
# ============================================
echo ""
echo "⏳ Waiting for rollout..."
kubectl rollout status deployment/maya-pipecat --timeout=300s

# ============================================
# Step 8: Verify deployment
# ============================================
echo ""
echo "============================================"
echo "✅ Deployment complete!"
echo "============================================"
echo ""
echo "📊 Current Status:"
kubectl get pods -l app=maya-pipecat | head -10
echo ""
kubectl get svc maya-pipecat
echo ""
kubectl get hpa maya-pipecat-hpa

# ============================================
# Save deployment info to CSV for tracking
# ============================================
DEPLOY_TIMESTAMP=$(date -u +%Y-%m-%dT%H:%M:%S)
DEPLOYED_BY=$(whoami)

# Create CSV header if file doesn't exist
if [ ! -f "$HISTORY_CSV" ]; then
    echo "timestamp,version_tag,git_commit,git_branch,previous_version,status,deployed_by,notes" > "$HISTORY_CSV"
fi

# Escape notes for CSV (replace commas and quotes)
SAFE_NOTES=$(echo "$DEPLOY_NOTES" | sed 's/"/""/g')

# Append deployment record to CSV
echo "${DEPLOY_TIMESTAMP},${IMAGE_TAG},${GIT_HASH},${GIT_BRANCH},${PREVIOUS_VERSION},SUCCESS,${DEPLOYED_BY},\"${SAFE_NOTES}\"" >> "$HISTORY_CSV"

echo ""
echo "============================================"
echo "📝 Deployment Recorded in CSV"
echo "============================================"
echo "📁 File: deployments/deployment_history.csv"
echo ""
echo "| Field           | Value"
echo "|-----------------|----------------------------------"
echo "| Timestamp       | ${DEPLOY_TIMESTAMP}"
echo "| Version Tag     | ${IMAGE_TAG}"
echo "| Git Commit      | ${GIT_HASH}"
echo "| Git Branch      | ${GIT_BRANCH}"
echo "| Previous Ver    | ${PREVIOUS_VERSION}"
echo "| Status          | SUCCESS"
echo "| Deployed By     | ${DEPLOYED_BY}"
echo ""
echo "🔄 To ROLLBACK to previous version:"
echo "   ./deployments/k8s/rollback.sh ${PREVIOUS_VERSION}"
echo ""
echo "🔄 To ROLLBACK to this version later:"
echo "   ./deployments/k8s/rollback.sh ${IMAGE_TAG}"
echo ""
echo "📜 To see deployment history:"
echo "   cat deployments/deployment_history.csv | column -t -s ','"
echo ""
echo "📜 To see available ECR versions:"
echo "   ./deployments/k8s/list-versions.sh"
echo "============================================"