#!/bin/bash
set -e

# Deploy service to Kubernetes using Helm
# Usage: ./deploy-services.sh <environment> <service-name> <namespace> <version>

ENVIRONMENT=$1
SERVICE_NAME=$2
NAMESPACE=$3
VERSION=$4

if [ -z "$ENVIRONMENT" ] || [ -z "$SERVICE_NAME" ] || [ -z "$NAMESPACE" ] || [ -z "$VERSION" ]; then
    echo "Usage: $0 <environment> <service-name> <namespace> <version>"
    echo "Example: $0 dev tbi-acc-cron-service access 1.0.0"
    exit 1
fi

echo "=== Deploying $SERVICE_NAME to $ENVIRONMENT ==="
echo "Namespace: $NAMESPACE"
echo "Version: $VERSION"
echo ""

# Set paths
CHART_PATH="charts/${SERVICE_NAME}"
VALUES_FILE="tbi-environments/${ENVIRONMENT}/values/${SERVICE_NAME}.yaml"
SECRETS_FILE="tbi-environments/${ENVIRONMENT}/secrets/secrets.${SERVICE_NAME}.yaml"

# Verify chart exists
if [ ! -d "$CHART_PATH" ]; then
    echo "✗ Error: Chart not found at $CHART_PATH"
    exit 1
fi

# Verify values file exists
if [ ! -f "$VALUES_FILE" ]; then
    echo "✗ Error: Values file not found at $VALUES_FILE"
    exit 1
fi

echo "✓ Chart found: $CHART_PATH"
echo "✓ Values file found: $VALUES_FILE"

# Check if secrets file exists
if [ -f "$SECRETS_FILE" ]; then
    echo "✓ Secrets file found: $SECRETS_FILE"
    SECRETS_ARG="-f $SECRETS_FILE"
else
    echo "⚠ Warning: Secrets file not found at $SECRETS_FILE"
    echo "  Proceeding without secrets file"
    SECRETS_ARG=""
fi

# Create namespace if it doesn't exist
echo ""
echo "Ensuring namespace exists..."
kubectl create namespace $NAMESPACE --dry-run=client -o yaml | kubectl apply -f -
echo "✓ Namespace ready: $NAMESPACE"

# Build image tag
IMAGE_TAG="${VERSION}"
ECR_REGISTRY="489176460030.dkr.ecr.ca-central-1.amazonaws.com"
FULL_IMAGE="${ECR_REGISTRY}/${SERVICE_NAME}:${IMAGE_TAG}"

echo ""
echo "Image: $FULL_IMAGE"

# Deploy with Helm
echo ""
echo "Deploying with Helm..."
helm upgrade --install $SERVICE_NAME $CHART_PATH \
    --namespace $NAMESPACE \
    --values $VALUES_FILE \
    $SECRETS_ARG \
    --set image.repository="${ECR_REGISTRY}/${SERVICE_NAME}" \
    --set image.tag="${IMAGE_TAG}" \
    --set environment="${ENVIRONMENT}" \
    --wait \
    --timeout 5m \
    --atomic

echo ""
echo "✓ Deployment successful!"

# Show deployment status
echo ""
echo "=== Deployment Status ==="
kubectl get pods -n $NAMESPACE -l app=$SERVICE_NAME
echo ""
kubectl get svc -n $NAMESPACE -l app=$SERVICE_NAME
echo ""

# Update requirements.yaml if it exists
REQUIREMENTS_FILE="tbi-environments/${ENVIRONMENT}/requirements.yaml"
if [ -f "$REQUIREMENTS_FILE" ]; then
    echo "Checking requirements.yaml..."
    
    # Check if service already exists in requirements.yaml
    if grep -q "name: ${SERVICE_NAME}" "$REQUIREMENTS_FILE"; then
        echo "✓ Service already in requirements.yaml"
    else
        echo "Adding service to requirements.yaml..."
        
        # Backup requirements.yaml
        cp "$REQUIREMENTS_FILE" "${REQUIREMENTS_FILE}.backup"
        
        # Add service entry
        cat >> "$REQUIREMENTS_FILE" << EOF

  - name: ${SERVICE_NAME}
    version: ${VERSION}
    repository: "file://../charts/${SERVICE_NAME}"
    condition: ${SERVICE_NAME}.enabled
EOF
        
        echo "✓ Added ${SERVICE_NAME} to requirements.yaml"
        
        # Show what was added
        echo ""
        echo "Added entry:"
        tail -5 "$REQUIREMENTS_FILE"
        
        # Commit the change
        if [ -d "tbi-environments/.git" ]; then
            cd tbi-environments
            git add "${ENVIRONMENT}/requirements.yaml"
            if git diff --cached --quiet; then
                echo "No changes to commit"
            else
                git commit -m "Add ${SERVICE_NAME} to ${ENVIRONMENT} requirements.yaml"
                echo "✓ Committed requirements.yaml update"
            fi
            cd ..
        fi
    fi
fi

echo ""
echo "=== Deployment Complete ==="
echo "Service: $SERVICE_NAME"
echo "Environment: $ENVIRONMENT"
echo "Namespace: $NAMESPACE"
echo "Version: $VERSION"
echo ""
echo "To check logs:"
echo "  kubectl logs -n $NAMESPACE -l app=$SERVICE_NAME --tail=100 -f"
echo ""
echo "To check status:"
echo "  kubectl get pods -n $NAMESPACE -l app=$SERVICE_NAME"
