#!/usr/bin/env bash
set -euo pipefail

REPO_BASE="${REPO_BASE:-http://repo.sinutech.kr/centos}"
BACKUP_DIR="/etc/yum.repos.d/backup-$(date +%Y%m%d-%H%M%S)"

echo "=========================================="
echo " SinuTech CentOS Repository Switch Script"
echo "=========================================="

OS_ID="unknown"
OS_VERSION="unknown"

if [ -f /etc/os-release ]; then
    # shellcheck disable=SC1091
    . /etc/os-release
    OS_ID="${ID:-unknown}"
    OS_VERSION="${VERSION_ID:-unknown}"
elif [ -f /etc/redhat-release ]; then
    OS_ID="centos"
    OS_VERSION="$(sed -n 's/.*release \([0-9][0-9.]*\).*/\1/p' /etc/redhat-release | head -n 1)"
    OS_VERSION="${OS_VERSION:-unknown}"
else
    echo "[ERROR] OS release file not found."
    exit 1
fi

echo "[INFO] OS ID      : ${OS_ID}"
echo "[INFO] VERSION_ID : ${OS_VERSION}"

if [[ "$OS_ID" != "centos" ]]; then
    echo "[ERROR] This script supports CentOS only. Current OS: ${OS_ID}"
    exit 1
fi

if ! command -v yum >/dev/null 2>&1 && ! command -v dnf >/dev/null 2>&1; then
    echo "[ERROR] yum or dnf command not found."
    exit 1
fi

MAJOR_VERSION="${OS_VERSION%%.*}"

mkdir -p "$BACKUP_DIR"

echo "[INFO] Backing up existing repo files to: $BACKUP_DIR"
if ls /etc/yum.repos.d/*.repo >/dev/null 2>&1; then
    cp -a /etc/yum.repos.d/*.repo "$BACKUP_DIR"/
    rm -f /etc/yum.repos.d/*.repo
fi

case "$MAJOR_VERSION" in
    6)
        echo "[INFO] Configuring CentOS 6.10 Vault repo."

        cat > /etc/yum.repos.d/SinuTech-CentOS-6.repo <<EOF
[base]
name=SinuTech CentOS 6.10 - Base
baseurl=${REPO_BASE}/vault/6.10/os/\$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

[updates]
name=SinuTech CentOS 6.10 - Updates
baseurl=${REPO_BASE}/vault/6.10/updates/\$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

[extras]
name=SinuTech CentOS 6.10 - Extras
baseurl=${REPO_BASE}/vault/6.10/extras/\$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
EOF
        ;;

    7)
        echo "[INFO] Configuring CentOS 7.9.2009 Vault repo."

        cat > /etc/yum.repos.d/SinuTech-CentOS-7.repo <<EOF
[base]
name=SinuTech CentOS 7 - Base
baseurl=${REPO_BASE}/vault/7.9.2009/os/\$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

[updates]
name=SinuTech CentOS 7 - Updates
baseurl=${REPO_BASE}/vault/7.9.2009/updates/\$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

[extras]
name=SinuTech CentOS 7 - Extras
baseurl=${REPO_BASE}/vault/7.9.2009/extras/\$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
EOF
        ;;

    8)
        echo "[INFO] Configuring CentOS 8.5.2111 Vault repo."

        cat > /etc/yum.repos.d/SinuTech-CentOS-8.repo <<EOF
[baseos]
name=SinuTech CentOS 8 - BaseOS
baseurl=${REPO_BASE}/vault/8.5.2111/BaseOS/\$basearch/os/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial

[appstream]
name=SinuTech CentOS 8 - AppStream
baseurl=${REPO_BASE}/vault/8.5.2111/AppStream/\$basearch/os/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial

[extras]
name=SinuTech CentOS 8 - Extras
baseurl=${REPO_BASE}/vault/8.5.2111/extras/\$basearch/os/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial

[powertools]
name=SinuTech CentOS 8 - PowerTools
baseurl=${REPO_BASE}/vault/8.5.2111/PowerTools/\$basearch/os/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
EOF
        ;;

    9)
        echo "[INFO] Configuring CentOS Stream 9 repo."

        cat > /etc/yum.repos.d/SinuTech-CentOS-Stream-9.repo <<EOF
[baseos]
name=SinuTech CentOS Stream 9 - BaseOS
baseurl=${REPO_BASE}/stream/9-stream/BaseOS/\$basearch/os/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial

[appstream]
name=SinuTech CentOS Stream 9 - AppStream
baseurl=${REPO_BASE}/stream/9-stream/AppStream/\$basearch/os/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial

[crb]
name=SinuTech CentOS Stream 9 - CRB
baseurl=${REPO_BASE}/stream/9-stream/CRB/\$basearch/os/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial

[extras-common]
name=SinuTech CentOS Stream 9 - Extras Common
baseurl=${REPO_BASE}/stream/9-stream/extras/\$basearch/extras-common/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-Extras-SHA512
EOF
        ;;

    *)
        echo "[ERROR] Unsupported CentOS version: ${OS_VERSION}"
        echo "[INFO] Supported versions: CentOS 6, 7, 8, CentOS Stream 9"
        exit 1
        ;;
esac

echo "[INFO] Cleaning package manager cache."

if command -v dnf >/dev/null 2>&1; then
    dnf clean all
    dnf makecache
    dnf repolist
else
    yum clean all
    yum makecache
    yum repolist
fi

echo "=========================================="
echo " Done"
echo " Backup path: ${BACKUP_DIR}"
echo "=========================================="
