#!/usr/bin/bash


# ==============================================================================
# CONFIGURATION - Replace these with your actual OCI OCIDs
# ==============================================================================
COMPARTMENT_ID="ocid1.tenancy.oc1..aaaaaaaag2ktdzyg43meie6cuotjayzopab7qp3ub7ruviwhbek5wvjaee4q"   # Found under Identity -> Compartments
SUBNET_ID="ocid1.subnet.oc1.us-sanjose-1.aaaaaaaapk3bqxxpxftargesahni7aiwyp7zr3rc5xe3buenmkzyomb2rhga" # Found under Networking -> VCN -> Subnets
IMAGE_ID="ocid1.image.oc1.us-sanjose-1.aaaaaaaalxgxfjgq3zoeq3szqajo4jfdcc2ycfqnlcaoqam7lo5jj4iztqeq"   # E.g., Ubuntu 22.04 or 24.04 San Jose Image ID

# Fixed Always Free AMD Values
SHAPE="VM.Standard.E2.1.Micro"
DISPLAY_NAME="sanjose-free-amd"
# Auto-checks your availability domains in San Jose
AD_NAME=$(oci iam availability-domain list | jq -r '.data[0].name') 

# Ensure SSH Key exists
SSH_KEY_PATH="$HOME/.ssh/id_rsa.pub"
if [ ! -f "$SSH_KEY_PATH" ]; then
    echo "🔑 Generating a new SSH key pair..."
    ssh-keygen -t rsa -b 4096 -N "" -f "$HOME/.ssh/id_rsa"
fi

echo "🚀 Starting provisioning loop for AMD Micro in San Jose ($AD_NAME)..."

i=1

while true; do
    echo "$(date): Attempting to launch AMD instance..."
    echo "$i ..."
    # Execute the OCI compute instance launch command
    LAUNCH_OUTPUT=$(oci compute instance launch \
        --compartment-id "$COMPARTMENT_ID" \
        --availability-domain "$AD_NAME" \
        --shape "$SHAPE" \
        --subnet-id "$SUBNET_ID" \
        --image-id "$IMAGE_ID" \
        --display-name "$DISPLAY_NAME" \
        --assign-public-ip true \
        --ssh-authorized-keys-file "$SSH_KEY_PATH" \
        2>&1)

echo "$LAUNCH_OUTPUT"
break
        
    # Check if the command succeeded
    if echo "$LAUNCH_OUTPUT" | grep -q "id"; then
        echo "🎉 Success! VM is now provisioning."
       # echo "$LAUNCH_OUTPUT" | jq -r '.data | "Instance Name: \(.["display-name"])\nInstance ID: \(.id)"'
        break
    elif [[ "$LAUNCH_OUTPUT" == *"capacity"* ]];then

#echo "$LAUNCH_OUTPUT" | grep -q "Out of host capacity"; 


        echo "⚠️ Out of Host Capacity. Retrying in 5 minutes..."
        sleep 300
    else 
        echo "❌ Critical Error Encountered:"
        echo "$LAUNCH_OUTPUT"
        echo "Stopping loop to protect your API limits."
        exit 1
    fi
    i=$i+1
done

echo $LAUNCH_OUTPUT