#!/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"

# Проверка установлен ли Wine
if command -v wine >/dev/null 2>&1; then
    echo "Wine уже установлен, пропускаем установку."
else
    echo "Wine не установлен, начинаем установку..."

    # Обновление репозиториев
    run_with_fancy_progress "Обновление списка пакетов" \
        "apt-get update"

    # Установка Wine
    run_with_fancy_progress "Установка Wine" \
        "apt-get install -y wine"
fi

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

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

# 2. Распаковка архива в домашнюю директорию пользователя
run_with_fancy_progress "Распаковка архива" \
    "tar -xzf $archive_path -C /home/$graphical_user/"

# 3. Установка прав на распакованные файлы и каталоги
run_with_fancy_progress "Установка прав на файлы" \
    "chown -R $graphical_user:$graphical_user /home/$graphical_user/.wine && \
     chmod -R 755 /home/$graphical_user/.wine"

# 4. Создание ярлыка для Demand Editor
run_with_fancy_progress "Создание ярлыка на рабочем столе" \
    "sudo -u $graphical_user bash -c 'cat > /home/$graphical_user/Desktop/Demand_Editor.desktop <<EOL
[Desktop Entry]
Name=Demand Editor 4.0
Type=Application
Exec=wine \"/home/$graphical_user/.wine/drive_c/Program Files (x86)/Demand Editor 4.0/Demand Editor.exe\"
Icon=/home/$graphical_user/.wine/drive_c/Program Files (x86)/Demand Editor 4.0/Demand Editor.exe
Categories=Office;
EOL'"

# 5. Установка прав на ярлык
run_with_fancy_progress "Установка прав на ярлык" \
    "chown $graphical_user:$graphical_user /home/$graphical_user/Desktop/Demand_Editor.desktop && \
     chmod +x /home/$graphical_user/Desktop/Demand_Editor.desktop"

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