#!/usr/bin/bash
# wps-office-builder – установщик WPS Office для Fedora из Arch-пакета
# Версия: 1.2 (исключены зависимости от libbz2, libmysqlclient, libpeony)

set -e

# Цвета
if [ -t 1 ]; then
    GREEN='\033[0;32m'; BLUE='\033[0;34m'; RED='\033[0;31m'; YELLOW='\033[1;33m'; NC='\033[0m'
else
    GREEN=''; BLUE=''; RED=''; YELLOW=''; NC=''
fi

info() { echo -e "${BLUE}➡${NC} $1"; }
success() { echo -e "${GREEN}✅${NC} $1"; }
error() { echo -e "${RED}❌${NC} $1"; }
warn() { echo -e "${YELLOW}⚠${NC} $1"; }
step() { echo -e "\n${BLUE}=== $1 ===${NC}"; }

CONFIG_FILE="/etc/wps-builder.conf"
DEFAULT_URL="https://download.opensuse.org/repositories/home:/alveus:/sterling/Arch/x86_64/wps-office-12.1.2.25882-17-x86_64.pkg.tar.zst"
WORK_DIR="/tmp/wps-builder-$$"
RPM_BACKUP="/tmp/wps-office-latest.rpm"

cleanup() {
    if [ -d "$WORK_DIR" ]; then
        rm -rf "$WORK_DIR"
        info "Временные файлы удалены: $WORK_DIR"
    fi
}
trap cleanup EXIT

get_url() {
    if [ -f "$CONFIG_FILE" ]; then
        URL=$(grep -E '^[[:space:]]*url[[:space:]]*=' "$CONFIG_FILE" | head -1 | sed -E 's/^[[:space:]]*url[[:space:]]*=[[:space:]]*//' | tr -d ' ')
        [ -n "$URL" ] && echo "$URL" && return
    fi
    echo "$DEFAULT_URL"
}

check_deps() {
    local deps=("curl" "rpmbuild" "tar" "zstd")
    local missing=()
    for dep in "${deps[@]}"; do
        if ! command -v "$dep" &>/dev/null; then
            missing+=("$dep")
        fi
    done
    if [ ${#missing[@]} -ne 0 ]; then
        error "Отсутствуют программы: ${missing[*]}"
        sudo dnf install -y "${missing[@]}"
    fi
}

do_install() {
    step "Начало установки WPS Office"
    check_deps
    URL=$(get_url)
    info "URL пакета: $URL"
    mkdir -p "$WORK_DIR"/{SOURCES,SPECS,RPMS,BUILD,BUILDROOT}
    
    step "Скачивание Arch-пакета"
    curl -L --progress-bar -o "$WORK_DIR/SOURCES/wps-office.pkg.tar.zst" "$URL"
    success "Архив загружен."
    
    step "Подготовка SPEC-файла (исключение проблемных зависимостей)"
    cat > "$WORK_DIR/SPECS/wps-office.spec" << 'EOF'
%global debug_package %{nil}
%global _enable_debug_packages 0
%global _unpackaged_files_terminate_build 0

%define __brp_check_rpaths %{nil}
%define __os_install_post %{nil}
%define _build_id_links none
%undefine _missing_build_ids_terminate_build

# Исключаем проблемные зависимости (libbz2, libmysqlclient, libpeony)
%global __requires_exclude ^libbz2\\.so\\.1\\.0|libmysqlclient\\.so\\.18|libpeony\\.so\\.3

Name:           wps-office
Version:        12.1.2.25882
Release:        1%{?dist}
Summary:        WPS Office Suite for Linux (repacked from Arch Linux)
License:        Proprietary
URL:            https://www.wps.com/

Source0:        wps-office.pkg.tar.zst
BuildArch:      x86_64
BuildRequires:  tar zstd

# Основные зависимости (системные)
Requires:       fontconfig
Requires:       dejavu-sans-fonts
Requires:       dejavu-serif-fonts
Requires:       liberation-fonts
Requires:       qt5-qtbase
Requires:       qt5-qtwayland
Requires:       openssl

%description
WPS Office Suite. Generated from the Arch Linux binary package.

%prep
tar -xf %{SOURCE0} -C %{_builddir}

%build
# empty

%install
mkdir -p %{buildroot}
cp -a %{_builddir}/opt %{buildroot}/
cp -a %{_builddir}/usr %{buildroot}/
cp -a %{_builddir}/etc %{buildroot}/
find %{buildroot} -type f -name '*.debug' -delete 2>/dev/null || :

%files
%defattr(755,root,root)
/opt/kingsoft
/usr/bin/*
/usr/share/*
%config(noreplace) /etc

%changelog
* Thu May 14 2026 WPS Builder <wps@local> - 12.1.2.25882-1
- Excluded libbz2, libmysqlclient, libpeony dependencies
EOF
    success "SPEC-файл создан."
    
    step "Сборка RPM"
    LOG_FILE="/var/log/wps-builder.log"
    if rpmbuild -ba --define "_topdir $WORK_DIR" "$WORK_DIR/SPECS/wps-office.spec" > "$LOG_FILE" 2>&1; then
        success "RPM собран успешно."
    else
        error "Ошибка сборки. Лог: $LOG_FILE"
        exit 1
    fi
    
    RPM_FILE=$(find "$WORK_DIR/RPMS/x86_64/" -name "wps-office-*.rpm" | head -1)
    if [ -z "$RPM_FILE" ]; then
        error "RPM не найден."
        exit 1
    fi
    info "RPM: $(basename "$RPM_FILE")"
    
    # Сохраняем копии
    cp "$RPM_FILE" "$RPM_BACKUP"
    cp "$RPM_FILE" "$HOME/wps-office-latest.rpm"
    info "Резервная копия: $RPM_BACKUP и $HOME/wps-office-latest.rpm"
    
    step "Установка WPS Office"
    if sudo dnf install -y "$RPM_FILE"; then
        success "WPS Office успешно установлен!"
        info "Запустите 'wps'."
    else
        error "Ошибка при установке. Вы можете установить RPM вручную:"
        echo "  sudo dnf install $RPM_BACKUP"
        echo "Или с игнорированием зависимостей (не рекомендуется):"
        echo "  sudo rpm -ivh --nodeps $RPM_BACKUP"
        exit 1
    fi
}

case "$1" in
    start) do_install ;;
    clean) rm -rf /tmp/wps-builder-* ; success "Очищено." ;;
    version) echo "wps-office-builder version 1.2" ;;
    help|--help|-h) 
        echo "Использование: wps-office-builder [start|clean|version|help]"
        ;;
    *) echo "Использование: wps-office-builder start" ;;
esac