#!/bin/bash

echo "🔄 ОБНОВЛЕНИЕ РЕПОЗИТОРИЯ notpeer.icu"

# Переходим в директорию репозитория
REPO_DIR="/var/www/html/repo.notpeer.icu"
cd "$REPO_DIR" || { echo "❌ Директория не найдена!"; exit 1; }

echo "📁 Текущая директория: $(pwd)"
echo "📦 Наличие .deb файлов:"
find . -name "*.deb" -type f | head -10

# 1. Удаляем старые файлы
echo "🧹 Очищаю старые файлы..."
rm -f Packages Packages.gz Packages.bz2

# 2. Создаем Packages файл
echo "📝 Создаю Packages файл..."

# Вариант A: Если есть .deb файлы
DEB_COUNT=$(find . -name "*.deb" -type f | wc -l)
if [ "$DEB_COUNT" -gt 0 ]; then
    echo "Найдено $DEB_COUNT .deb файлов"
    
    # Создаем пустой файл
    > Packages
    
    # Обрабатываем каждый .deb файл
    find . -name "*.deb" -type f | while read -r DEB_FILE; do
        echo "Обрабатываю: $(basename "$DEB_FILE")"
        
        # Извлекаем информацию из .deb
        dpkg-deb -I "$DEB_FILE" 2>/dev/null > /tmp/deb_info
        
        if [ $? -eq 0 ]; then
            # Получаем основные поля
            PACKAGE=$(grep "^Package:" /tmp/deb_info | cut -d' ' -f2- | head -1)
            VERSION=$(grep "^Version:" /tmp/deb_info | cut -d' ' -f2- | head -1)
            ARCH=$(grep "^Architecture:" /tmp/deb_info | cut -d' ' -f2- | head -1)
            NAME=$(grep "^Name:" /tmp/deb_info | cut -d' ' -f2- | head -1)
            DESC=$(grep "^Description:" /tmp/deb_info | cut -d' ' -f2- | head -1)
            MAINTAINER=$(grep "^Maintainer:" /tmp/deb_info | cut -d' ' -f2- | head -1)
            AUTHOR=$(grep "^Author:" /tmp/deb_info | cut -d' ' -f2- | head -1)
            SECTION=$(grep "^Section:" /tmp/deb_info | cut -d' ' -f2- | head -1)
            DEPENDS=$(grep "^Depends:" /tmp/deb_info | cut -d' ' -f2- | head -1)
            
            # Вычисляем хэши и размер
            SIZE=$(stat -c%s "$DEB_FILE" 2>/dev/null || stat -f%z "$DEB_FILE")
            MD5=$(md5sum "$DEB_FILE" | cut -d' ' -f1)
            SHA1=$(sha1sum "$DEB_FILE" | cut -d' ' -f1)
            SHA256=$(sha256sum "$DEB_FILE" | cut -d' ' -f1)
            
            # Относительный путь для Cydia
            FILENAME="./$(basename "$DEB_FILE")"
            
            # Добавляем в Packages
            cat >> Packages << ENTRY
Package: ${PACKAGE:-unknown}
Name: ${NAME:-Unknown}
Version: ${VERSION:-1.0}
Architecture: ${ARCH:-iphoneos-arm}
Description: ${DESC:-No description}
Author: ${AUTHOR:-Unknown}
Maintainer: ${MAINTAINER:-Unknown}
Section: ${SECTION:-Utilities}
Depends: ${DEPENDS:-firmware (>= 6.0)}
Filename: $FILENAME
Size: $SIZE
MD5sum: $MD5
SHA1: $SHA1
SHA256: $SHA256

ENTRY
            
        else
            echo "⚠️  Ошибка чтения $DEB_FILE"
        fi
    done
    
else
    echo "⚠️  Нет .deb файлов! Создаю тестовый..."
    
    # Создаем тестовый пакет
    create_test_deb
    DEB_FILE="test-package_1.0_iphoneos-arm.deb"
    
    cat > Packages << PKG
Package: com.notpeer.test
Name: Test Package
Version: 1.0
Architecture: iphoneos-arm
Description: Test package for notpeer.icu repository
Author: notpeer.icu
Maintainer: notpeer.icu <admin@notpeer.icu>
Section: Utilities
Depends: firmware (>= 6.0)
Filename: ./$DEB_FILE
Size: $(stat -c%s "$DEB_FILE" 2>/dev/null || echo "1024")
MD5sum: $(md5sum "$DEB_FILE" | cut -d' ' -f1)
SHA1: $(sha1sum "$DEB_FILE" | cut -d' ' -f1)
SHA256: $(sha256sum "$DEB_FILE" | cut -d' ' -f1)

PKG
fi

# 3. Сжимаем файлы
echo "🗜️  Сжимаю Packages..."
if [ -s Packages ]; then
    gzip -9c Packages > Packages.gz
    bzip2 -9c Packages > Packages.bz2
else
    echo "❌ Packages файл пустой!"
    echo "# Empty repository" > Packages
    gzip -c Packages > Packages.gz
    bzip2 -c Packages > Packages.bz2
fi

# 4. Создаем Release файл
echo "📄 Создаю Release файл..."
update_release_file() {
    # Получаем хэши
    PACK_SIZE=$(stat -c%s Packages 2>/dev/null || stat -f%z Packages)
    PACK_GZ_SIZE=$(stat -c%s Packages.gz 2>/dev/null || stat -f%z Packages.gz)
    PACK_BZ2_SIZE=$(stat -c%s Packages.bz2 2>/dev/null || stat -f%z Packages.bz2)
    
    PACK_MD5=$(md5sum Packages | cut -d' ' -f1)
    PACK_GZ_MD5=$(md5sum Packages.gz | cut -d' ' -f1)
    PACK_BZ2_MD5=$(md5sum Packages.bz2 | cut -d' ' -f1)
    
    PACK_SHA1=$(sha1sum Packages | cut -d' ' -f1)
    PACK_GZ_SHA1=$(sha1sum Packages.gz | cut -d' ' -f1)
    PACK_BZ2_SHA1=$(sha1sum Packages.bz2 | cut -d' ' -f1)
    
    PACK_SHA256=$(sha256sum Packages | cut -d' ' -f1)
    PACK_GZ_SHA256=$(sha256sum Packages.gz | cut -d' ' -f1)
    PACK_BZ2_SHA256=$(sha256sum Packages.bz2 | cut -d' ' -f1)
    
    cat > Release << REL
Origin: notpeer.icu Repository
Label: notpeer.icu
Suite: stable
Version: 1.0
Codename: ios
Architectures: iphoneos-arm
Components: main
Description: <span class="cydia-title">notpeer.icu Repository</span><br>Custom packages for iOS
Author: notpeer.icu
Icon: https://repo.notpeer.icu/CydiaIcon.png
Date: $(date -R)
MD5Sum:
 $PACK_MD5 $PACK_SIZE Packages
 $PACK_GZ_MD5 $PACK_GZ_SIZE Packages.gz
 $PACK_BZ2_MD5 $PACK_BZ2_SIZE Packages.bz2
SHA1:
 $PACK_SHA1 $PACK_SIZE Packages
 $PACK_GZ_SHA1 $PACK_GZ_SIZE Packages.gz
 $PACK_BZ2_SHA1 $PACK_BZ2_SIZE Packages.bz2
SHA256:
 $PACK_SHA256 $PACK_SIZE Packages
 $PACK_GZ_SHA256 $PACK_GZ_SIZE Packages.gz
 $PACK_BZ2_SHA256 $PACK_BZ2_SIZE Packages.bz2
REL
}

update_release_file

# 5. Функция создания тестового .deb
create_test_deb() {
    echo "Создаю тестовый .deb файл..."
    
    TEST_DIR="/tmp/notpeer_test_$$"
    mkdir -p "$TEST_DIR/DEBIAN"
    
    cat > "$TEST_DIR/DEBIAN/control" << CTRL
Package: com.notpeer.test
Name: Test Package
Version: 1.0
Architecture: iphoneos-arm
Description: Test package for notpeer.icu repository
Author: notpeer.icu
Maintainer: notpeer.icu
Section: Utilities
Depends: firmware (>= 6.0)
CTRL
    
    mkdir -p "$TEST_DIR/usr/bin"
    echo '#!/bin/bash
echo "=========================================="
echo "notpeer.icu Repository Test Package"
echo "Repository is working correctly!"
echo "=========================================="' > "$TEST_DIR/usr/bin/notpeer-test"
    chmod +x "$TEST_DIR/usr/bin/notpeer-test"
    
    dpkg-deb -b "$TEST_DIR" "test-package_1.0_iphoneos-arm.deb" 2>/dev/null
    
    if [ $? -eq 0 ]; then
        echo "✅ Тестовый пакет создан"
    else
        # Альтернативный метод
        ar r "test-package_1.0_iphoneos-arm.deb" debian-binary control.tar.gz data.tar.gz 2>/dev/null || \
        echo "Создаю простой .deb вручную..."
        touch "test-package_1.0_iphoneos-arm.deb"
    fi
    
    rm -rf "$TEST_DIR"
}

# 6. Проверка результата
echo ""
echo "📊 РЕЗУЛЬТАТ:"
echo "=============="
ls -la Packages*
echo ""
echo "✅ Размеры файлов:"
echo "   Packages:     $(stat -c%s Packages) байт"
echo "   Packages.gz:  $(stat -c%s Packages.gz) байт"
echo "   Packages.bz2: $(stat -c%s Packages.bz2) байт"
echo ""
echo "📦 Содержимое Packages (первые 5 строк):"
head -5 Packages
echo ""
echo "🌐 Проверка доступности:"
echo "   curl -I https://repo.notpeer.icu/Packages.bz2"
echo "   curl -s https://repo.notpeer.icu/Packages.bz2 | wc -c"
