#!/bin/bash

# Функция для отрисовки анимированного индикатора
fancy_progress() {
    local activity="$1"
    local i=0
    local frames=("|" "/" "-" "\\")
    while kill -0 $! 2>/dev/null; do
        printf "\r%s %s" "$activity" "${frames[$((i++ % ${#frames[@]}))]}"
        sleep 0.1
    done
    echo "\r$activity: Завершено."
}

# Функция для выполнения команды с анимированным индикатором
run_with_fancy_progress() {
    local description="$1"
    local command="$2"

    echo "================================================"
    echo "Начато: $description"
    echo "================================================"

    eval "$command" &
    local pid=$!
    fancy_progress "$description"
    wait $pid
    local status=$?

    echo "================================================"
    if [ $status -eq 0 ]; then
        echo "Успешно завершено: $description"
    else
        echo "Ошибка при выполнении: $description"
        eval "$command" # Запускаем команду снова для вывода ошибок
        exit 1
    fi
    echo "================================================"
}

# Проверка прав root
if [[ $EUID -ne 0 ]]; then
    echo "ОШИБКА: Скрипт должен запускаться от root!" >&2
    exit 1
fi

# Определяем пользователя с GUI, исключая administrator и root
graphical_user=$(who | grep -v -E "administrator|root" | grep -m1 "(:[0-9])" | awk '{print $1}')

if [ -z "$graphical_user" ]; then
    # Если не нашли пользователя с GUI, попробуем найти любого не-root пользователя
    graphical_user=$(who | grep -v -E "administrator|root" | awk '{print $1}' | head -n1)

    if [ -z "$graphical_user" ]; then
        echo "Не удалось определить пользователя (исключая administrator и root)"
        exit 1
    fi
fi

# Обрезаем @домен, если он есть
graphical_user="${graphical_user%@*}"

echo "Установка для пользователя: $graphical_user"

# 1. Скачивание архива
archive_path="/tmp/spravki.tar.gz"
remote_archive_url="https://repo.consulzeny.ru/astra_linux/distr/spravki.tar.gz"

if [ ! -f "$archive_path" ]; then
    run_with_fancy_progress "Скачивание архива справок" \
        "wget -O \"$archive_path\" \"$remote_archive_url\""
fi

# 2. Распаковка архива
run_with_fancy_progress "Распаковка архива" \
    "tar -xzf $archive_path -C /tmp"

# 3. Установка пакетов (с обработкой исключения понижения версий)
run_with_fancy_progress "Установка .deb пакетов" \
    "apt-get install -y --allow-downgrades /tmp/spravki/*.deb"

# 4. Копирование файлов
run_with_fancy_progress "Копирование файлов справок" \
    "cp -r /tmp/spravki/.wine-spravki-bk /home/$graphical_user/ && \
     chown -R $graphical_user:$graphical_user /home/$graphical_user/.wine-spravki-bk"

# 5. Создание ярлыка
run_with_fancy_progress "Создание ярлыка на рабочем столе" \
    "cat > /home/$graphical_user/Desktop/СПО_Справки_БК.desktop <<EOL
[Desktop Entry]
Name=СПО Справки БК
Type=Application
Exec=env WINEPREFIX=\"/home/$graphical_user/.wine-spravki-bk\" /opt/wine-bk/bin/wine C:\\\\\\\\Program\\\\ Files\\\\\\\\СправкиБК\\\\\\\\БК.exe
Icon=/home/$graphical_user/.wine-spravki-bk/bk-2.jpg
EOL
chown $graphical_user:$graphical_user /home/$graphical_user/Desktop/СПО_Справки_БК.desktop
chmod +x /home/$graphical_user/Desktop/СПО_Справки_БК.desktop"

echo "УСТАНОВКА ЗАВЕРШЕНА УСПЕШНО"
