#!/bin/bash

# Define paths and new repository base URL
REPO_DIR="/etc/yum.repos.d"
BACKUP_DIR="/etc/yum.repos.d/backup_$(date +%F_%T)"
NEW_REPO_BASE="https://archive.mirror.derak.cloud/almalinux"

# GPG keys paths
GPG_ALMA="/etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux"
GPG_EPEL="/etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$VERSION"

# Step 1: Check AlmaLinux version (using only the major version)
echo "Checking AlmaLinux version..."
VERSION=$(rpm -E %rhel | cut -d '.' -f 1)  # Extracts only the major version (8 or 9)

if [[ "$VERSION" != "8" && "$VERSION" != "9" ]]; then
    echo "Unsupported AlmaLinux version: $VERSION. This script only supports AlmaLinux versions 8.x and 9.x."
    exit 1
fi

# Step 2: Set the base URL for the detected major version
NEW_REPO_URL="$NEW_REPO_BASE/$VERSION"



# Step 3: Check for existing GPG keys and download if missing
echo "Checking for existing GPG keys..."

# Detect AlmaLinux version from /etc/os-release
ALMA_VERSION=$(grep -oP '(?<=VERSION_ID=")[0-9]+' /etc/os-release)

if [[ -z "$ALMA_VERSION" ]]; then
    echo "❌ Could not determine AlmaLinux version. Exiting."
    exit 1
fi

echo "Detected AlmaLinux version: $ALMA_VERSION"

# Define GPG key paths in /etc/pki/rpm-gpg
GPG_ALMA="/etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux-$ALMA_VERSION"
GPG_EPEL="/etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$ALMA_VERSION"

MISSING_KEYS=false

# Check and download AlmaLinux GPG key
if [[ ! -f "$GPG_ALMA" ]]; then
    echo "⚠️ AlmaLinux GPG key not found in $GPG_ALMA!"
    echo "Downloading AlmaLinux GPG key..."
    
    # Create directory if it doesn't exist
    sudo mkdir -p /etc/pki/rpm-gpg/

    sudo curl -o "$GPG_ALMA" "https://archive.mirror.derak.cloud/almalinux/key/RPM-GPG-KEY-AlmaLinux-$ALMA_VERSION.gpg"
    
    if [[ $? -eq 0 ]]; then
        sudo rpm --import "$GPG_ALMA"
        MISSING_KEYS=true
    else
        echo "❌ Failed to download AlmaLinux GPG key!"
    fi
fi

# Check and download EPEL GPG key
if [[ ! -f "$GPG_EPEL" ]]; then
    echo "⚠️ EPEL GPG key not found in $GPG_EPEL!"
    echo "Downloading EPEL GPG key..."
    
    sudo curl -o "$GPG_EPEL" "https://archive.mirror.derak.cloud/almalinux/key/RPM-GPG-KEY-EPEL-$ALMA_VERSION.gpg"

    if [[ $? -eq 0 ]]; then
        sudo rpm --import "$GPG_EPEL"
        MISSING_KEYS=true
    else
        echo "❌ Failed to download EPEL GPG key!"
    fi
fi

# Final message
if [[ "$MISSING_KEYS" = true ]]; then
    echo "✅ GPG keys downloaded and imported."
else
    echo "✅ GPG keys already exist."
fi





# Step 4: Backup all existing `.repo` files
echo "Backing up current repository files..."
sudo mkdir -p "$BACKUP_DIR"
sudo mv "$REPO_DIR"/*.repo "$BACKUP_DIR/" 2>/dev/null || echo "No repository files to back up."
echo "Backup completed: $BACKUP_DIR."

# Step 5: Create new `.repo` files
echo "Creating new repository files for AlmaLinux version $VERSION..."

# BaseOS repo
cat <<EOL | sudo tee "$REPO_DIR/almalinux-baseos.repo" > /dev/null
[baseos]
name=AlmaLinux BaseOS - \$releasever - \$basearch
baseurl=$NEW_REPO_URL/BaseOS/\$basearch/os/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux
EOL

# AppStream repo
cat <<EOL | sudo tee "$REPO_DIR/almalinux-appstream.repo" > /dev/null
[appstream]
name=AlmaLinux AppStream - \$releasever - \$basearch
baseurl=$NEW_REPO_URL/AppStream/\$basearch/os/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux
EOL

# Extras repo
cat <<EOL | sudo tee "$REPO_DIR/almalinux-extras.repo" > /dev/null
[extras]
name=AlmaLinux Extras - \$releasever - \$basearch
baseurl=$NEW_REPO_URL/extras/\$basearch/os/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux
EOL

# HighAvailability repo
cat <<EOL | sudo tee "$REPO_DIR/almalinux-highavailability.repo" > /dev/null
[highavailability]
name=AlmaLinux HighAvailability - \$releasever - \$basearch
baseurl=$NEW_REPO_URL/HighAvailability/\$basearch/os/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux
EOL

# NFV repo
cat <<EOL | sudo tee "$REPO_DIR/almalinux-nfv.repo" > /dev/null
[nfv]
name=AlmaLinux NFV - \$releasever - \$basearch
baseurl=$NEW_REPO_URL/NFV/\$basearch/os/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux
EOL

# RT repo
cat <<EOL | sudo tee "$REPO_DIR/almalinux-rt.repo" > /dev/null
[rt]
name=AlmaLinux RT - \$releasever - \$basearch
baseurl=$NEW_REPO_URL/RT/\$basearch/os/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux
EOL

# ResilientStorage repo
cat <<EOL | sudo tee "$REPO_DIR/almalinux-resilientstorage.repo" > /dev/null
[resilientstorage]
name=AlmaLinux ResilientStorage - \$releasever - \$basearch
baseurl=$NEW_REPO_URL/ResilientStorage/\$basearch/os/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux
EOL

# SAP repo
cat <<EOL | sudo tee "$REPO_DIR/almalinux-sap.repo" > /dev/null
[sap]
name=AlmaLinux SAP - \$releasever - \$basearch
baseurl=$NEW_REPO_URL/SAP/\$basearch/os/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux
EOL

# SAPHANA repo
cat <<EOL | sudo tee "$REPO_DIR/almalinux-saphana.repo" > /dev/null
[saphana]
name=AlmaLinux SAPHANA - \$releasever - \$basearch
baseurl=$NEW_REPO_URL/SAPHANA/\$basearch/os/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux
EOL

# PowerTools/CRB repo
if [[ "$VERSION" == "8" ]]; then
    cat <<EOL | sudo tee "$REPO_DIR/almalinux-powertools.repo" > /dev/null
[powertools]
name=AlmaLinux PowerTools - \$releasever - \$basearch
baseurl=$NEW_REPO_URL/PowerTools/\$basearch/os/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux
EOL
elif [[ "$VERSION" == "9" ]]; then
    cat <<EOL | sudo tee "$REPO_DIR/almalinux-crb.repo" > /dev/null
[crb]
name=AlmaLinux CRB - \$releasever - \$basearch
baseurl=$NEW_REPO_URL/CRB/\$basearch/os/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux
EOL
fi

# Step 6: Add EPEL repository
echo "Creating epel.repo..."
EPEL_REPO_FILE="$REPO_DIR/epel.repo"
cat <<EOL | sudo tee "$EPEL_REPO_FILE" > /dev/null
[epel]
name=Extra Packages for Enterprise Linux \$releasever - \$basearch
baseurl=https://archive.mirror.derak.cloud/epel/\$releasever/Everything/\$basearch/
enabled=1
gpgcheck=0
countme=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-\$releasever

[epel-debuginfo]
name=Extra Packages for Enterprise Linux \$releasever - \$basearch - Debug
baseurl=https://archive.mirror.derak.cloud/epel/\$releasever/Everything/\$basearch/debug/
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-\$releasever
gpgcheck=0

[epel-source]
name=Extra Packages for Enterprise Linux \$releasever - \$basearch - Source
baseurl=https://archive.mirror.derak.cloud/epel/\$releasever/Everything/source/tree/
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-\$releasever
gpgcheck=0
EOL

echo "Created epel.repo at $EPEL_REPO_FILE."

# Step 7: Clean yum cache to apply new settings
echo "Cleaning yum cache..."
sudo yum clean all -y

# Step 8: Confirm completion
echo "All AlmaLinux and EPEL repositories have been replaced and configured with correct case-sensitive paths."
echo "Repositories now include BaseOS, AppStream, Extras, HighAvailability, NFV, RT, ResilientStorage, SAP, SAPHANA, PowerTools/CRB (version-specific), and EPEL."
echo "Old repository files are backed up in: $BACKUP_DIR."

# Step 9: Optionally delete this script (uncomment if desired)
# rm -- "$0"