#!/bin/bash
set -e

# Конфигурация
KERNEL_URL="https://git.linuxtesting.ru/pub/scm/linux/kernel/git/lvc/linux-stable.git/snapshot/linux-stable-6.1.132-lvc20.tar.gz"
KERNEL_DIR="linux-stable-6.1.132-lvc20"
PACKAGE_SUFFIX="green"
BASE_VERSION="6.1.132-lvc20"
KERNEL_DISPLAY_NAME="VC Green Linux Edition"
OUTPUT_DIR="$HOME/kernel-builds"

# Функция расширенной настройки конфигурации
configure_kernel() {
    # Базовые параметры
    make x86_64_defconfig

    # Основные улучшения для железа
    ./scripts/config --file .config \
        --set-str CONFIG_LOCALVERSION "-${PACKAGE_SUFFIX}" \
        --set-val CONFIG_HZ 1000 \
        --enable CONFIG_PREEMPT_VOLUNTARY \
        --enable CONFIG_MQ_IOSCHED_KYBER \
        --enable CONFIG_X86_AMD_PSTATE \
        --enable CONFIG_PCI_LEGACY \
        --enable CONFIG_IDE \
        --module CONFIG_USB_MON \
        --enable CONFIG_USB_EHCI_HCD \
        --enable CONFIG_USB_XHCI_HCD \
        --enable CONFIG_USB_OHCI_HCD

    # Добавьте в конфигурацию:
    ./scripts/config --enable CONFIG_MODULES \
        --enable CONFIG_RD_ZSTD \
        --module CONFIG_ZSTD_COMPRESS

    # Расширенная поддержка графики
    ./scripts/config --file .config \
        --module CONFIG_DRM_I915 \
        --module CONFIG_DRM_AMDGPU \
        --module CONFIG_DRM_NOUVEAU \
        --module CONFIG_DRM_RADEON

    # Полная поддержка принтеров
    ./scripts/config --file .config \
        --enable CONFIG_USB_PRINTER \
        --module CONFIG_HPLIP \
        --module CONFIG_CUPS \
        --module CONFIG_PARPORT \
        --enable CONFIG_PARPORT_PC \
        --module CONFIG_PPDEV \
        --module CONFIG_FOOZITECH_PRINTER

    # Дополнительные интерфейсы
    ./scripts/config --file .config \
        --enable CONFIG_USB_SUPPORT \
        --module CONFIG_USB_SERIAL \
        --module CONFIG_USB_SERIAL_GENERIC \
        --module CONFIG_USB_SERIAL_PL2303

    # Энергосбережение и оптимизации
    ./scripts/config --file .config \
        --enable CONFIG_BPF_JIT \
        --enable CONFIG_BFQ_GROUP_IOSCHED \
        --enable CONFIG_ZSWAP \
        --enable CONFIG_PM_AUTOSLEEP \
        --enable CONFIG_INTEL_POWERCLAMP \
        --enable CONFIG_USB_AUTOSUSPEND

    # Поддержка устаревшего оборудования
    ./scripts/config --file .config \
        --enable CONFIG_ISA \
        --enable CONFIG_ISAPNP \
        --enable CONFIG_SERIAL_8250 \
        --enable CONFIG_SERIAL_8250_CONSOLE

    make olddefconfig

    # Проверка критических параметров
    echo -e "\n\033[1;33mПроверка конфигурации:\033[0m"
    zgrep -E 'PRINTER|PARPORT|HPLIP|PCI_LEGACY|IDE|USB' .config
}

# Создание выходной директории
mkdir -p "$OUTPUT_DIR"

# Установка зависимостей
sudo apt-get update && sudo apt-get install -y \
    build-essential fakeroot libncurses-dev \
    libssl-dev flex bison libelf-dev dwarves \
    debhelper dpkg-dev bc rsync zstd \
    cpio kmod lz4 pciutils usbutils

# Сборка в временной директории
WORKDIR=$(mktemp -d)
cd "$WORKDIR"

wget --no-check-certificate -O kernel.tar.gz "$KERNEL_URL"
tar xzf kernel.tar.gz
cd "$KERNEL_DIR"

# Настройка версии
echo "${BASE_VERSION}-${PACKAGE_SUFFIX}" > .scmversion
sed -i Makefile \
    -e "s/^EXTRAVERSION =.*/EXTRAVERSION = -${PACKAGE_SUFFIX}/" \
    -e "s/^NAME =.*/NAME = ${KERNEL_DISPLAY_NAME}/"

# Конфигурация ядра
configure_kernel

# Сборка пакетов
make -j$(nproc) clean
make -j$(nproc) bindeb-pkg \
    KDEB_PKGVERSION="${BASE_VERSION}-${PACKAGE_SUFFIX}" \
    LOCALVERSION="-green" \
    KBUILD_BUILD_TIMESTAMP="$(date +'%Y-%m-%d')" \
    DEB_BUILD_OPTIONS="parallel=$(nproc) nocheck"

# Перенос и переименование пакетов
cd ..
for pkg in *.deb; do
    new_name=$(echo "$pkg" | sed \
        -e "s/${BASE_VERSION}/${BASE_VERSION}-${PACKAGE_SUFFIX}/" \
        -e 's/_amd64/-amd64/' \
        -e 's/-green_6\.1\.132-lvc20-green//')
    mv "$pkg" "${new_name}"
done

mv *.deb "$OUTPUT_DIR/"
rm -rf "$WORKDIR"

echo -e "\n\033[1;32mСборка успешно завершена!\033[0m"
echo "Пакеты в: $OUTPUT_DIR"
ls -lh "$OUTPUT_DIR"/*.deb

# Инструкция для проверки оборудования
echo -e "\nДля проверки поддержки оборудования выполните:"
echo "dmesg | grep -i 'new hardware\|driver'"
echo "journalctl --boot=0 | grep -i 'usb\|pci'"
