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

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 "=========================================="

if [ ! -f /etc/os-release ]; then
    echo "[ERROR] /etc/os-release 파일을 찾을 수 없습니다."
    exit 1
fi

. /etc/os-release

OS_ID="${ID:-unknown}"
OS_VERSION="${VERSION_ID:-unknown}"

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

if [[ "$OS_ID" != "centos" ]]; then
    echo "[ERROR] 이 스크립트는 CentOS 계열용입니다. 현재 OS: ${OS_ID}"
    exit 1
fi

mkdir -p "$BACKUP_DIR"

echo "[INFO] 기존 repo 파일 백업: $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

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

case "$MAJOR_VERSION" in
    7)
        echo "[INFO] CentOS 7 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] CentOS 8 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] 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] 지원하지 않는 CentOS 버전입니다: ${OS_VERSION}"
        echo "[INFO] 지원 버전: CentOS 7, CentOS 8, CentOS Stream 9"
        exit 1
        ;;
esac

echo "[INFO] yum/dnf 캐시 정리"

if command -v dnf >/dev/null 2>&1; then
    dnf clean all
    dnf makecache
elif command -v yum >/dev/null 2>&1; then
    yum clean all
    yum makecache
else
    echo "[ERROR] yum 또는 dnf 명령을 찾을 수 없습니다."
    exit 1
fi

echo "=========================================="
echo " 완료"
echo " 백업 위치: ${BACKUP_DIR}"
echo "=========================================="

if command -v yum >/dev/null 2>&1; then
    yum repolist
elif command -v dnf >/dev/null 2>&1; then
    dnf repolist
fi
