#!/usr/bin/env bash
# info_ru: Программа автоматизации процесса подготовки юридическими и физическими лицами документов для представления в налоговые органы в электронной форме и на бумажном носителе.
########################################################################
export PROG_URL="https://www.nalog.gov.ru"
export WH_WINE_USE="wine-10.0-alt-tkg-wow64"
export WINEPREFIX="nalog"
export PROG_NAME="Налогоплательщик ЮЛ"
export PROG_ICON="npul"
export BASE_PFX="none"
export WINEARCH="win64"
export WH_WINDOWS_VER="10"
export WH_XDG_OPEN="doc"
export INSTALL_DLL="msxml4 msxml6 corefonts wsh57 gdiplus vb6run"

try_get_page "https://data.nalog.ru/rn77/program/5961229/"
HTML_CONTENT=$(read_page)

# Извлекаем все версии одним проходом (и 3, и 4 цифры, и MSI, и EXE)
declare -A VERSIONS
while IFS= read -r match; do
    if [[ -n "$match" ]]; then
        ver=$(echo "$match" | grep -oP '\d+')
        ext="${match##*.}"
        digits="${#ver}"
        VERSIONS["${digits}_${ext}"]="$ver"
    fi
done < <(echo "$HTML_CONTENT" | grep -oP 'NalogUL\d{3,4}\.(msi|exe)')

# Версия программы (3 цифры, приоритет MSI)
if [[ -n "${VERSIONS[3_msi]}" ]]; then
    PROG_VER="${VERSIONS[3_msi]}"
    PROG_EXT="msi"
elif [[ -n "${VERSIONS[3_exe]}" ]]; then
    PROG_VER="${VERSIONS[3_exe]}"
    PROG_EXT="exe"
else
    print_error "Не найдена установочная версия программы"
    exit 1
fi

# Версия обновления (4 цифры, приоритет EXE)
if [[ -n "${VERSIONS[4_exe]}" ]]; then
    UPDATE_VER="${VERSIONS[4_exe]}"
    UPDATE_EXT="exe"
elif [[ -n "${VERSIONS[4_msi]}" ]]; then
    UPDATE_VER="${VERSIONS[4_msi]}"
    UPDATE_EXT="msi"
else
    UPDATE_VER=""
    UPDATE_EXT=""
fi

# Формируем URL пути
PROG_URL_PATH="${PROG_VER:0:1}.${PROG_VER:1}"
AUTOINSTALL_PROG="${WH_TMP_DIR}/NalogUL${PROG_VER}.${PROG_EXT}"

if [[ -n "$UPDATE_VER" ]]; then
    UPDATE_URL_PATH="${UPDATE_VER:0:1}.${UPDATE_VER:1:2}.${UPDATE_VER:3}"
    AUTOINSTALL_UPDATE="${WH_TMP_DIR}/NalogUL${UPDATE_VER}.${UPDATE_EXT}"
fi

prepair_wine

# Устанавливаем основную программу
if [[ "$PROG_EXT" == "msi" ]]; then
    if try_download "https://data.nalog.ru/files/nalul/${PROG_URL_PATH}/NalogUL${PROG_VER}.msi" "${AUTOINSTALL_PROG}"; then
        wine_run_install "${AUTOINSTALL_PROG}" /quiet /norestart INSTALLDIR="c:\npul"
        try_remove_file "${AUTOINSTALL_PROG}"
    else
        print_error "Не удалось скачать установочный файл MSI"
        exit 1
    fi
else
    if try_download "https://data.nalog.ru/files/nalul/${PROG_URL_PATH}/NalogUL${PROG_VER}.exe" "${AUTOINSTALL_PROG}"; then
        wine_run_install "${AUTOINSTALL_PROG}" /VERYSILENT /NORESTART /DIR="c:\npul"
        try_remove_file "${AUTOINSTALL_PROG}"
    else
        print_error "Не удалось скачать установочный файл EXE"
        exit 1
    fi
fi

# Устанавливаем печать PDF417
PRINT_INSTALLER="$(find "$DRIVE_C/npul/INPUTDOC" -name "Печать НД с PDF417*.msi" | tail -n 1)"
if [[ -n "$PRINT_INSTALLER" ]]; then
    wine_run_install "${PRINT_INSTALLER}" "/q"
fi

# Процедуры конвертации, индексация данных
wine_run_install "$DRIVE_C/npul/INPUTDOC/inputdoc.exe" go.ini

# Устанавливаем обновление (если есть)
if [[ -n "$UPDATE_VER" ]]; then
    if [[ "$UPDATE_EXT" == "msi" ]]; then
        if try_download "https://data.nalog.ru/files/nalul/${UPDATE_URL_PATH}/NalogUL${UPDATE_VER}.msi" "${AUTOINSTALL_UPDATE}"; then
            wine_run_install "${AUTOINSTALL_UPDATE}" /quiet /norestart
            try_remove_file "${AUTOINSTALL_UPDATE}"
            
            # После обновления может появиться новая версия печати
            PRINT_INSTALLER="$(find "$DRIVE_C/npul/INPUTDOC" -name "Печать НД с PDF417*.msi" | tail -n 1)"
            if [[ -n "$PRINT_INSTALLER" ]]; then
                wine_run_install "${PRINT_INSTALLER}" /quiet /norestart
            fi
        fi
    else
        if try_download "https://data.nalog.ru/files/nalul/${UPDATE_URL_PATH}/NalogUL${UPDATE_VER}.exe" "${AUTOINSTALL_UPDATE}"; then
            wine_run_install "${AUTOINSTALL_UPDATE}" /VERYSILENT /NORESTART
            try_remove_file "${AUTOINSTALL_UPDATE}"
            
            # После обновления может появиться новая версия печати
            PRINT_INSTALLER="$(find "$DRIVE_C/npul/INPUTDOC" -name "Печать НД с PDF417*.msi" | tail -n 1)"
            if [[ -n "$PRINT_INSTALLER" ]]; then
                wine_run_install "${PRINT_INSTALLER}" /quiet /norestart
            fi
        fi
    fi
else
    print_info "Дополнительных обновлений не требуется."
fi

touch "$DRIVE_C/npul/INPUTDOC/linux.txt"
WIN_FILE_EXEC="$DRIVE_C/npul/INPUTDOC/inputdoc.exe"
create_desktop "$PROG_NAME" "$WIN_FILE_EXEC" "$PROG_ICON"
