#!/bin/bash

set -e

# Detect OS
detect_os() {
    if [ -f /etc/os-release ]; then
        . /etc/os-release
        OS_ID=$(echo "$ID" | tr '[:upper:]' '[:lower:]')
    else
        OS_ID=""
    fi
}

# Install via APT/YUM (NGINX plugin)
install_certbot_nginx_pkg() {
    case "$OS_ID" in
        ubuntu|debian)
            echo "📦 Installing via APT..."
            sudo apt update
            sudo apt install -y certbot python3-certbot-nginx
            ;;
        centos|rhel|almalinux|rocky)
            echo "📦 Installing via YUM..."
            sudo yum install -y epel-release
            sudo yum install -y certbot python3-certbot-nginx
            ;;
        amzn)
            echo "📦 Installing via YUM (Amazon Linux)..."
            sudo yum install -y certbot python3-certbot-nginx
            ;;
        *)
            echo "[ERROR] Unsupported OS: $OS_ID"
            exit 1
            ;;
    esac
}

# Install via SNAP (Recommended)
install_certbot_snap() {
    echo "🚀 Installing Certbot via SNAP (preferred)..."
    sudo snap install core
    sudo snap refresh core
    sudo snap install --classic certbot

    # Ensure certbot command works globally
    if [ ! -f /usr/bin/certbot ]; then
        sudo ln -s /snap/bin/certbot /usr/bin/certbot
    fi
}

# ---------------- MAIN ----------------

detect_os
echo "Detected OS: $OS_ID"

# ✅ Step 1: Check if certbot already installed
if command -v certbot >/dev/null 2>&1; then
    echo "✔ Certbot already installed"
    certbot --version
    exit 0
fi

# ✅ Step 2: Try SNAP first
if command -v snap >/dev/null 2>&1; then
    install_certbot_snap
else
    echo "⚠️ SNAP not available, falling back to OS package manager..."
    install_certbot_nginx_pkg
fi

# ✅ Final verification
if command -v certbot >/dev/null 2>&1; then
    echo "✔ Certbot installed successfully!"
    certbot --version
else
    echo "❌ Failed to install Certbot."
    exit 1
fi