#!/bin/bash

#Этот скрипт -- неофициальное решение от АСКОН для установки КОМПАС-3D и всех компонентов, включая Библиотеку Стандартных Изделий, на Fedora 44.
#Обратите внимание, что КОМПАС-3D для Linux официально поддерживается только на трёх операционных системах: Astra Linux Special Edition 1.8, Альт Рабочая Станция 11 / К11 и РЕД ОС 8. 
#Используйте, редактируйте и распространяйте этот скрипт на свой страх и риск.

set -euo pipefail

# Цвета
RED=$'\033[0;31m'
YELLOW=$'\033[1;33m'
GREEN=$'\033[2;33m'
NC=$'\033[0m'

#Проверка на root
if [[ $EUID == 0 ]]; then
    echo "${RED}ВНИМАНИЕ: Скрипт предназначен и протестирован для запуска от обычного пользователя. Запуск скрипта от суперпользователя может иметь непредвиденные последствия. Пожалуйста, перезапустите скрипт от обычного пользователя без sudo."
    exit 1
fi

#Функция вопроса
ask() {
    echo -n "$* (y/n): "
    local answer
    while true
    do
        read -r answer || return 1
        case "$answer" in
            [Yy]|[Yy][Ee][Ss]|[Дд]|[Дд][Аа])
                return 0 ;;
            [Nn]|[Nn][Oo]|[Нн]|[Нн][Ее][Тт])
                return 1 ;;
            *) echo -n "Некорректный ввод. $* (y/n): ";;
        esac
    done
}

#Функция проверки дистрибутива
DIST_NAME="Unknown Linux"
check_dist() {
    if [[ -f /etc/os-release ]]; then
        . /etc/os-release
        if [[ "$ID" != "fedora" || "$VERSION_ID" != "44" ]]; then
            echo "${YELLOW}Кажется, вы используете $PRETTY_NAME в качестве операционной системы. Данный скрипт написан и протестирован для Fedora 44.${NC}"
            ask "Продолжить установку на $PRETTY_NAME?" || error "Установка прервана пользователем."
        fi
        DIST_NAME="$ID $VERSION_ID"
    else
        echo "${YELLOW}Не удаётся определить версию дистрибутива. Данный скрипт написан и протестирован для Fedora 44.${NC}"
        ask "Продолжить с неизвестным дистрибутивом?" || error "Установка прервана пользователем."
    fi
}

#Функция загрузки файла
download() {
    local url
    local rc=0
    local retry=1
    while (( retry != 0 )); do
        for url in "$@"; do
            echo "Скачивается: $url"
            wget -t 10 --show-progress -c -nc -P . "$url" || { echo "${YELLOW}Ошибка скачивания файла: $url. Будет предоставлена возможность повторить попытку скачивания после окончания загрузки остальных файлов.${NC}"; rc=1; }
        done
        if (( rc != 0 )); then
            echo "${YELLOW}Ошибка скачивания${NC}"
            if ! ask "Повторить попытку скачивания?"; then
                echo "${RED}Ошибка скачивания. Скрипт остановлен пользователем.${NC}"
                exit 1
            fi
        else
            retry=0
        fi
    done
}

#Функция подключения репозитория КОМПАС-3D
add_repo(){
    #Добавляем основной репозиторий
    sudo bash -c "$(wget -O - https://repo.ascon.ru/scripts/ascon-stable-redos.sh)" || true
    sudo sed -i "s|^baseurl=.*$|baseurl=https://repo.ascon.ru/stable/rpm/redos/8.0/|" /etc/yum.repos.d/ascon.repo || echo "${YELLOW}Не удалось отредактировать файл основного репозитория АСКОН${NC}"
    #Добавляем репозиторий personal
    sudo bash -c "$(wget -O - https://repo.ascon.ru/personal/scripts/ascon-personal-redos.sh)" || true
    sudo sed -i "s|^baseurl=.*$|baseurl=https://repo.ascon.ru/stable/rpm/redos/8.0/|" /etc/yum.repos.d/ascon-personal.repo || echo "${YELLOW}Не удалось отредактировать файл некоммерческого репозитория АСКОН${NC}"
    sudo dnf check-update --refresh || true
}

echo "Этот скрипт установит репозитории КОМПАС-3D на Fedora 44."
check_dist
add_repo
if [[ $DIST_NAME == "fedora 44" ]]; then
    echo "${YELLOW}Для корректной работы библиотеки СИ и МиС в директорию /opt/ascon/polynom-library/ будет помещён дополнительный пакет.${NC}"
    sudo dnf install -y rpm2cpio cpio
    mkdir -p /tmp/icu71 && cd /tmp/icu71
    download https://rpms.remirepo.net/enterprise/8/remi/x86_64/libicu71-71.1-2.el8.remi.x86_64.rpm
    rpm2cpio libicu71-71.1-2.el8.remi.x86_64.rpm | cpio -idmv
    sudo mkdir -p /opt/ascon/polynom-library/database/pg/lib/
    sudo cp usr/lib64/libicu*.so.71* /opt/ascon/polynom-library/database/pg/lib/
    cd ~ && rm -rf /tmp/icu71
fi

echo "Завершена установка репозиториев КОМПАС-3D на $DIST_NAME"
echo "Устанавливаем дополнительные пакеты, необходимые для запуска КОМПАС-3D..."
sudo dnf install -y libXScrnSaver

if ask "Установить полную версию КОМПАС-3D со всеми доступными приложениями? (требуется 70 ГБ свободного дискового пространства в директории /opt/)"; then
    KOMPAS_VERSION=ascon-kompas3d-v25-full
    while true; do
        echo "Выберите необходимую версию КОМПАС-3D [1]:"
        echo "  1) КОМПАС-3D v25 (коммерческая) - вариант по умолчанию"
        echo "  2) КОМПАС-3D v25 Home (домашняя)"
        echo "  3) КОМПАС-3D v25 Study (учебная)"
        read -r answer
        case "$answer" in
        "" | 1)
            break
            ;;
        2)
            KOMPAS_VERSION=ascon-kompas3d-home-v25-full
            break
            ;;
        3)
            KOMPAS_VERSION=ascon-kompas3d-study-v25-full
            break
            ;;
        *)
            echo "Некорректное значение."
            ;; 
        esac
    done
    sudo dnf install -y $KOMPAS_VERSION ascon-common-coredump-watcher --setopt=tsflags=nocrypto
    echo "${GREEN}КОМПАС-3D установлен."
    if ask "Рекомендуется перезапустить систему после установки. Начать перезагрузку?"; then
        sudo reboot
    fi
else
    echo "${GREEN}Вы можете установить необходимые компоненты КОМПАС-3D с помощью команды:${NC}"
    echo "sudo dnf install имена_необходимых_пакетов ascon-common-coredump-watcher"
    echo "${GREEN}Например:${NC}"
    echo "sudo dnf install ascon-kompas3d-v25 ascon-kompas-v25 ascon-common-coredump-watcher #для установки КОМПАС-3D v25 и КОМПАС-График v25"
    echo "sudo dnf install ascon-kompas3d-home-v25-full ascon-common-coredump-watcher #для установки КОМПАС-3D v25 Home"
    echo "${YELLOW}*ascon-common-coredump-watcher - утилита сбора диагностической информации${NC}"
fi