#!/bin/bash

# Interactive startup script for attestation services
# This script reads key_init_mode from server_config.yaml and starts services accordingly

set -e

# Color codes for output
error_mode='\033[0;31m'
success_mode='\033[0;32m'
warning_mode='\033[1;33m'
info_mode='\033[0;34m'
NC='\033[0m' # No Color

# Paths
CONFIG_FILE="../attestation_server/conf/server_config.yaml"
ENV_FILE="../attestation_server/conf/.env"

# Function to print colored message
print_key_init_mode() {
    echo -e "${2}${1}${NC}"
}

# Function to get key_init_mode from server_config.yaml
get_key_init_mode() {
    local config_file=$1
    grep "^[[:space:]]*key_init_mode:" "$config_file" | sed 's/.*key_init_mode:[[:space:]]*["]*//;s/["]*[[:space:]]*#.*//;s/"//g'
}

# Display banner
echo ""
print_key_init_mode "========================================" "$info_mode"
print_key_init_mode "   Attestation Service Start Script" "$info_mode"
print_key_init_mode "========================================" "$info_mode"
echo ""

# Get current key_init_mode
CURRENT_MODE=$(get_key_init_mode "$CONFIG_FILE")
print_key_init_mode "Detected key_init_mode: $CURRENT_MODE" "$info_mode"
echo ""

# Check if key_init_mode is set
if [ -z "$CURRENT_MODE" ]; then
    print_key_init_mode "ERROR: Could not read key_init_mode from $CONFIG_FILE" "$error_mode"
    exit 1
fi

case $CURRENT_MODE in
    "local_config")
        print_key_init_mode "========================================" "$success_mode"
        print_key_init_mode "  Starting in local_config mode" "$success_mode"
        print_key_init_mode "========================================" "$success_mode"
        echo ""
        print_key_init_mode "This will start attestation_service WITHOUT key_manager" "$warning_mode"
        echo ""
        
        # Confirm before starting
        read -p "Continue? (y/n): " confirm
        if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then
            print_key_init_mode "Startup cancelled." "$warning_mode"
            exit 0
        fi
        
        echo ""
        print_key_init_mode "Starting services (without key_manager)..." "$warning_mode"
        echo ""
        
        # Start services without key_manager
         docker compose -f docker-compose.yaml \
             --env-file "$ENV_FILE" \
             up -d attestation_service
        
        print_key_init_mode "========================================" "$success_mode"
        print_key_init_mode "  Services started successfully!" "$success_mode"
        print_key_init_mode "  Mode: local_config (key_manager NOT started)" "$success_mode"
        print_key_init_mode "========================================" "$success_mode"
        ;;
        
    "service_derived")
        print_key_init_mode "========================================" "$success_mode"
        print_key_init_mode "  Starting in service_derived mode" "$success_mode"
        print_key_init_mode "========================================" "$success_mode"
        echo ""
        print_key_init_mode "This will start attestation_service WITH key_manager" "$warning_mode"
        echo ""
        
        # Confirm before starting
        read -p "Continue? (y/n): " confirm
        if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then
            print_key_init_mode "Startup cancelled." "$warning_mode"
            exit 0
        fi
        
        echo ""
        print_key_init_mode "Starting services (with key_manager)..." "$warning_mode"
        echo ""
        
        # Start services with key_manager using profile
        (cd "$DOCKER_DIR" && docker compose -f docker-compose.yaml \
             --profile keymanager \
             --env-file "$ENV_FILE" \
             up -d attestation_service key_manager)
        
        print_key_init_mode "========================================" "$success_mode"
        print_key_init_mode "  Services started successfully!" "$success_mode"
        print_key_init_mode "  Mode: service_derived (key_manager started)" "$success_mode"
        print_key_init_mode "========================================" "$success_mode"
        ;;
        
    *)
        print_key_init_mode "ERROR: Unknown key_init_mode: $CURRENT_MODE" "$error_mode"
        print_key_init_mode "Valid options: local_config, service_derived" "$error_mode"
        exit 1
        ;;
esac

echo ""
print_key_init_mode "To view logs, run:" "$info_mode"
echo "  docker compose -f docker-compose.yaml logs -f"
echo ""