#!/bin/bash
mv /usr/local/bin/progs/3progs.sh.desktop /etc/xdg/autostart/
rm -rf /usr/lib/calamares
rm -rf /usr/share/calamares
rm -rf /usr/include/libcalamares
rm -rf /usr/bin/calamares
rm -rf /etc/calamares
rm -rf /usr/share/applications/calamares.desktop
rm -rf /etc/xdg/autostart/calamares.desktop
ldconfig
# GPU detektálás
AMD_GPU=$(lspci -P | grep -iE "AMD|ATI" -c)
NVIDIA_GPU=$(lspci -P | grep "NVIDIA" -c)
# GPU driverek telepítése
if [[ $AMD_GPU -gt 0 ]]; then
    echo "AMD GPU észlelve, driverek telepítése..."
    pacman -S mesa vulkan-radeon lib32-vulkan-radeon lib32-mesa xf86-video-amdgpu --noconfirm
fi
if [[ $NVIDIA_GPU -gt 0 ]]; then
    echo "NVIDIA GPU észlelve, driverek telepítése..."
    pacman -S nvidia-dkms nvidia-utils nvidia-settings egl-wayland lib32-nvidia-utils --noconfirm
    sed -i 's/MODULES=()/MODULES=(nvidia nvidia_modeset nvidia_uvm nvidia_drm)/' /etc/mkinitcpio.conf
    echo "options nvidia_drm modeset=1 fbdev=1" > /etc/modprobe.d/nvidia.conf
    mkinitcpio -P
fi
# Boot loader telepítése
if [ -d "/sys/firmware/efi" ]; then
    # UEFI rendszer
    echo "UEFI rendszer észlelve, systemd-boot telepítése..."
    
    # LUKS titkosítás ellenőrzése
    ROOT_DEVICE=$(findmnt -n -o SOURCE /)
    ENCRYPTED=false
    CRYPTDEVICE_UUID=""
    CRYPTNAME="cryptroot"
    
    # Ellenőrizzük, van-e titkosított partíció
    if [[ "$ROOT_DEVICE" == "/dev/mapper/"* ]]; then
        ENCRYPTED=true
        #LUKS_DEVICE=$(blkid -t TYPE=crypto_LUKS -o device | head -n1)
        #CRYPTDEVICE_UUID=$(blkid -o value -s UUID "$LUKS_DEVICE")
        
        LUKS_DEVICE="/dev/$(sudo dmsetup deps -o devname cryptroot | grep -o '(.*)'| tr -d '()')"
        CRYPTDEVICE_UUID=$(echo "$ROOT_DEVICE" | sed 's|/dev/mapper/luks-||')
        
        echo "LUKS titkosítás észlelve: $LUKS_DEVICE (UUID: $CRYPTDEVICE_UUID)"
        
        # A fájlrendszer típusának ellenőrzése
        FS_TYPE=$(lsblk -no FSTYPE /dev/mapper/$CRYPTNAME 2>/dev/null || echo "")
        
        if [ -z "$FS_TYPE" ]; then
            # Ha még nincs megnyitva a titkosított eszköz, próbáljuk megnyitni
            echo "Titkosított eszköz nyitása ellenőrzéshez..."
            if [ ! -e "/dev/mapper/$CRYPTNAME" ]; then
                # Próbáljuk meg kinyitni (jelszó nélkül nem fog működni, de megpróbáljuk)
                cryptsetup open "$LUKS_DEVICE" "$CRYPTNAME" || true
            fi
            
            # Ellenőrizzük újra a fájlrendszert
            FS_TYPE=$(lsblk -no FSTYPE /dev/mapper/$CRYPTNAME 2>/dev/null || echo "")
            
            if [ -z "$FS_TYPE" ]; then
                # Ha még mindig nem tudjuk meghatározni, feltételezzük, hogy ext4
                echo "Nem sikerült meghatározni a fájlrendszer típusát, ext4-et feltételezünk"
                FS_TYPE="ext4"
            fi
        fi
        
        echo "Fájlrendszer típusa: $FS_TYPE"
        
        # mkinitcpio.conf módosítása a szükséges modulokkal és hook-okkal
        # Hozzáadjuk a dm-crypt és crypto modulokat
        if ! grep -q "dm[-_]crypt" <<< "$(grep "^MODULES=" /etc/mkinitcpio.conf)"; then
            echo "dm-crypt modul hozzáadása"
            sed -i 's/MODULES=(/MODULES=(dm-crypt /' /etc/mkinitcpio.conf
        fi
        
        if ! grep -q "crypto" <<< "$(grep "^MODULES=" /etc/mkinitcpio.conf)"; then
            echo "crypto modul hozzáadása"
            sed -i 's/MODULES=(/MODULES=(crypto /' /etc/mkinitcpio.conf
        fi
        
        # Használjuk a systemd hookokat a jobb LUKS kezeléshez
        if ! grep -q "sd-encrypt" <<< "$(grep "^HOOKS=" /etc/mkinitcpio.conf)"; then
            echo "sd-encrypt hook hozzáadása"
            sed -i 's/\(HOOKS=.*\)block/\1block sd-encrypt/' /etc/mkinitcpio.conf
        fi
        
        # Biztosítsuk, hogy keyboard és keymap is legyen
        if ! grep -q "keyboard" <<< "$(grep "^HOOKS=" /etc/mkinitcpio.conf)"; then
            echo "keyboard hook hozzáadása"
            sed -i 's/\(HOOKS=.*\)block/\1keyboard block/' /etc/mkinitcpio.conf
        fi
        
        if ! grep -q "keymap" <<< "$(grep "^HOOKS=" /etc/mkinitcpio.conf)"; then
            echo "keymap hook hozzáadása"
            sed -i 's/\(HOOKS=.*keyboard\)/\1 keymap/' /etc/mkinitcpio.conf
        fi
        
        # Hozzunk létre egy crypttab fájlt a titkosított eszköz kezeléséhez
        echo "$CRYPTNAME UUID=$CRYPTDEVICE_UUID none luks,discard" > /etc/crypttab
        echo "Crypttab létrehozva: $CRYPTNAME UUID=$CRYPTDEVICE_UUID"
        
        # Regeneráljuk az initramfs-t
        echo "Initramfs újragenerálása..."
        mkinitcpio -P
    else
        echo "Nem észleltünk LUKS titkosítást"
    fi
    
    # Root UUID és fájlrendszer típus lekérése
    ROOT_UUID=$(awk '$2=="/" {print $1}' /etc/fstab | grep -o 'UUID=.*' | cut -d'=' -f2)
    FS_TYPE=$(awk '$2=="/" {print $3}' /etc/fstab)
    
    # CPU microcode detect és a változó beállítása
    CPU=$(lscpu | grep "AMD" -c)
    if [[ $CPU -gt 0 ]]; then
        CPU_UCODE="initrd /amd-ucode.img"
	pacman -Rs intel-ucode --noconfirm
    elif [[ $(lscpu | grep "Intel" -c) -gt 0 ]]; then
        CPU_UCODE="initrd /intel-ucode.img"
	pacman -Rs amd-ucode --noconfirm
    else
        CPU_UCODE=""
    fi
    
    # Systemd-boot konfiguráció
    mkdir -p /boot/loader/entries
    
    # Időtúllépés és editor beállítása
    cat > /boot/loader/loader.conf << EOF
default raveos.conf
timeout 5
console-mode max
editor yes
EOF
    
    # Konfigurációs bejegyzések létrehozása
    if [ "$ENCRYPTED" = true ]; then
        if [ "$FS_TYPE" = "btrfs" ]; then
            echo "BTRFS esetén csak a sima (nem titkosított) mód támogatott"
            # Nem kezeljük a BTRFS + LUKS kombinációt, áttérünk a nem titkosított btrfs kezelésre
            
            cat > /boot/loader/entries/raveos.conf << EOF
title RaveOS GNOME Gaming 1.1
linux /vmlinuz-linux-zen
$CPU_UCODE
initrd /initramfs-linux-zen.img
options root=UUID=$ROOT_UUID rootflags=subvol=@ rw rootfstype=btrfs quiet
EOF
        else
            # Ez csak ext4 vagy más fájlrendszer + LUKS esetén fut le
            echo "EXT4 + LUKS konfiguráció létrehozása"
            cat > /boot/loader/entries/raveos.conf << EOF
title RaveOS GNOME Gaming 1.1 - LUKS+EXT4
linux /vmlinuz-linux-zen
$CPU_UCODE
initrd /initramfs-linux-zen.img
options cryptdevice=UUID=$CRYPTDEVICE_UUID:$CRYPTNAME root=/dev/mapper/$CRYPTNAME rw rootfstype=ext4 quiet
EOF
        fi
    else
        # Nem titkosított rendszer esetén
        if [ "$FS_TYPE" = "btrfs" ]; then
            echo "BTRFS konfiguráció létrehozása (nem titkosított)"
            cat > /boot/loader/entries/raveos.conf << EOF
title RaveOS GNOME Gaming 1.1
linux /vmlinuz-linux-zen
$CPU_UCODE
initrd /initramfs-linux-zen.img
options root=UUID=$ROOT_UUID rootflags=subvol=@ rw rootfstype=btrfs quiet
EOF
        else
            echo "Alapértelmezett konfiguráció létrehozása (nem titkosított)"
            cat > /boot/loader/entries/raveos.conf << EOF
title RaveOS GNOME Gaming 1.1
linux /vmlinuz-linux-zen
$CPU_UCODE
initrd /initramfs-linux-zen.img
options root=UUID=$ROOT_UUID rw quiet
EOF
        fi
    fi
    
    # EFI partíció és a partíció száma
    EFI_DISK=$(findmnt -n -o SOURCE /boot | sed 's/[0-9]*$//')
    EFI_PART=$(findmnt -n -o SOURCE /boot | grep -o '[0-9]*$')
    
    # Bootentry létrehozása
    echo "Bootentry létrehozása az EFI firmware-ben: $EFI_DISK, partíció: $EFI_PART"
    efibootmgr --create --disk "$EFI_DISK" --part "$EFI_PART" \
               --loader /EFI/systemd/systemd-bootx64.efi --label "RaveOS GNOME Gaming 1.1" \
               --verbose
    
    echo "Systemd-boot telepítése sikeres"
else
    # BIOS rendszer
    echo "BIOS rendszer észlelve, GRUB telepítése..."
    
    # LUKS titkosítás ellenőrzése
    ROOT_DEVICE=$(findmnt -n -o SOURCE /)
    LUKS_DEVICE=""
    CRYPTDEVICE_UUID=""
    CRYPTNAME="cryptroot"
    
    if [[ "$ROOT_DEVICE" == "/dev/mapper/"* ]]; then
        #LUKS_DEVICE=$(blkid -t TYPE=crypto_LUKS -o device | head -n1)
        #CRYPTDEVICE_UUID=$(blkid -o value -s UUID "$LUKS_DEVICE")
        
        LUKS_DEVICE="/dev/$(sudo dmsetup deps -o devname cryptroot | grep -o '(.*)'| tr -d '()')"
        CRYPTDEVICE_UUID=$(echo "$ROOT_DEVICE" | sed 's|/dev/mapper/luks-||')
        
        echo "LUKS titkosítás észlelve: $LUKS_DEVICE (UUID: $CRYPTDEVICE_UUID)"
        
        # A fájlrendszer típusának ellenőrzése
        FS_TYPE=$(lsblk -no FSTYPE /dev/mapper/$CRYPTNAME 2>/dev/null || echo "")
        
        if [ -z "$FS_TYPE" ]; then
            # Ha még nincs megnyitva a titkosított eszköz, feltételezzük, hogy ext4
            echo "Nem sikerült meghatározni a fájlrendszer típusát, ext4-et feltételezünk"
            FS_TYPE="ext4"
        fi
        
        echo "Fájlrendszer típusa: $FS_TYPE"
        
        # Modulok és hook-ok hozzáadása a mkinitcpio.conf-hoz
        if ! grep -q "dm[-_]crypt" <<< "$(grep "^MODULES=" /etc/mkinitcpio.conf)"; then
            echo "dm-crypt modul hozzáadása"
            sed -i 's/MODULES=(/MODULES=(dm-crypt /' /etc/mkinitcpio.conf
        fi
        
        if ! grep -q "crypto" <<< "$(grep "^MODULES=" /etc/mkinitcpio.conf)"; then
            echo "crypto modul hozzáadása"
            sed -i 's/MODULES=(/MODULES=(crypto /' /etc/mkinitcpio.conf
        fi
        
        # Használjuk a hagyományos encrypt hookot GRUB esetén
        if ! grep -q "encrypt" <<< "$(grep "^HOOKS=" /etc/mkinitcpio.conf)"; then
            echo "encrypt hook hozzáadása"
            sed -i 's/\(HOOKS=.*\)block/\1block encrypt/' /etc/mkinitcpio.conf
        fi
        
        # Biztosítsuk, hogy keyboard és keymap is legyen
        if ! grep -q "keyboard" <<< "$(grep "^HOOKS=" /etc/mkinitcpio.conf)"; then
            echo "keyboard hook hozzáadása"
            sed -i 's/\(HOOKS=.*\)block/\1keyboard block/' /etc/mkinitcpio.conf
        fi
        
        if ! grep -q "keymap" <<< "$(grep "^HOOKS=" /etc/mkinitcpio.conf)"; then
            echo "keymap hook hozzáadása"
            sed -i 's/\(HOOKS=.*keyboard\)/\1 keymap/' /etc/mkinitcpio.conf
        fi
        
        # Crypttab létrehozása
        echo "$CRYPTNAME UUID=$CRYPTDEVICE_UUID none luks,discard" > /etc/crypttab
        echo "Crypttab létrehozva: $CRYPTNAME UUID=$CRYPTDEVICE_UUID"
        
        # Regeneráljuk az initramfs-t
        echo "Initramfs újragenerálása..."
        mkinitcpio -P
        
        # GRUB konfiguráció módosítása
        # Csak ext4 + LUKS kombinációt támogatunk
        echo "GRUB konfiguráció frissítése alapértelmezett LUKS beállításokkal"
        sed -i "s|^GRUB_CMDLINE_LINUX=\"\"|GRUB_CMDLINE_LINUX=\"cryptdevice=UUID=$CRYPTDEVICE_UUID:$CRYPTNAME root=/dev/mapper/$CRYPTNAME\"|" /etc/default/grub
    else
        # Fájlrendszer típus lekérése
        ROOT_UUID=$(awk '$2=="/" {print $1}' /etc/fstab | grep -o 'UUID=.*' | cut -d'=' -f2)
        FS_TYPE=$(awk '$2=="/" {print $3}' /etc/fstab)
        
        # btrfs esetén speciális kernel paraméterek hozzáadása
        if [ "$FS_TYPE" = "btrfs" ]; then
            echo "GRUB konfiguráció frissítése BTRFS beállításokkal"
            sed -i "s|^GRUB_CMDLINE_LINUX=\"\"|GRUB_CMDLINE_LINUX=\"root=UUID=$ROOT_UUID rootflags=subvol=@ rootfstype=btrfs\"|" /etc/default/grub
        fi
    fi
    
    # GRUB telepítése és konfiguráció generálása
    echo "GRUB telepítése..."
    pacman -S grub --noconfirm
    grub-install --target=i386-pc --recheck /dev/sda
    sed -i 's/GRUB_DISTRIBUTOR=.*$/GRUB_DISTRIBUTOR="RaveOS GNOME Gaming 1.1 Linux"/' /etc/default/grub
    
    # GRUB konfiguráció generálása
    echo "GRUB konfiguráció generálása..."
    grub-mkconfig -o /boot/grub/grub.cfg
    
    echo "GRUB telepítése sikeres"
fi

# /boot ellenőrzés és javítás függvény
check_boot_directory() {
    echo "A /boot mappa tartalmának ellenőrzése..."
    
    # Ellenőrizzük, hogy a /boot mappa tartalmazza-e a szükséges fájlokat
    if [ -z "$(ls -A /boot)" ] || ! ls /boot/vmlinuz-linux-zen &> /dev/null || ! ls /boot/initramfs-linux-zen.img &> /dev/null; then
        echo "HIBA: A /boot mappa üres vagy hiányoznak a kernel fájlok!"
        
        # Ellenőrizzük, hogy a fájlok léteznek-e a rendszeren
        if [ -f /usr/lib/modules/*/vmlinuz ]; then
            echo "Kernel fájl megtalálva, másolás a /boot mappába..."
            cp /usr/lib/modules/*/vmlinuz /boot/vmlinuz-linux-zen
        else
            echo "KRITIKUS HIBA: Kernel fájl nem található a rendszeren!"
            echo "Próbáljuk telepíteni a linux-zen csomagot..."
            pacman -S linux-zen --noconfirm
        fi
        
        # Regeneráljuk a initramfs-t, ha szükséges
        echo "Initramfs újragenerálása..."
        mkinitcpio -p linux-zen
        
        # Ellenőrizzük, hogy a CPU microcode telepítve van-e
        if [ -f /boot/amd-ucode.img ] || [ -f /boot/intel-ucode.img ]; then
            echo "CPU microcode már telepítve."
        else
            # Ha nincs, akkor telepítsük újra a megfelelőt
            if [[ $(lscpu | grep "AMD" -c) -gt 0 ]]; then
                echo "AMD CPU észlelve, microcode telepítése..."
                pacman -S amd-ucode --noconfirm
            elif [[ $(lscpu | grep "Intel" -c) -gt 0 ]]; then
                echo "Intel CPU észlelve, microcode telepítése..."
                pacman -S intel-ucode --noconfirm
            fi
        fi
        
        # UEFI esetén próbáljuk újratelepíteni a bootloader-t
        if [ -d "/sys/firmware/efi" ]; then
            echo "UEFI rendszer, systemd-boot újratelepítése..."
            bootctl install
            
            # Ellenőrizzük, hogy a kernelt és initramfs-t kimásoltuk-e
            if [ ! -f /boot/vmlinuz-linux-zen ]; then
                echo "Kernel másolása a /boot mappába..."
                find /usr/lib/modules/ -name "vmlinuz*" -exec cp {} /boot/vmlinuz-linux-zen \;
            fi
            
            if [ ! -f /boot/initramfs-linux-zen.img ]; then
                echo "Initramfs újragenerálása..."
                mkinitcpio -p linux-zen
            fi
            
            # EFI partíció ellenőrzése
            EFI_PART=$(findmnt -n -o SOURCE /boot)
            if [ -z "$EFI_PART" ]; then
                echo "KRITIKUS HIBA: EFI partíció nem található!"
                echo "Próbáljuk megkeresni a megfelelő EFI partíciót..."
                
                # Keressük az EFI partíciót, ha nincs csatolva
                EFI_PART=$(lsblk -o NAME,FSTYPE | grep vfat | head -n1 | awk '{print $1}')
                
                if [ -n "$EFI_PART" ]; then
                    echo "EFI partíció található: $EFI_PART, csatolás a /boot könyvtárhoz..."
                    mount /dev/$EFI_PART /boot
                    
                    # Újra próbáljuk a bootloader telepítését
                    bootctl install
                    
                    # A fstab bejegyzést is frissítsük, hogy újraindításkor is megmaradjon
                    if ! grep -q "/boot" /etc/fstab; then
                        UUID=$(blkid -s UUID -o value /dev/$EFI_PART)
                        echo "UUID=$UUID /boot vfat defaults 0 2" >> /etc/fstab
                    fi
                fi
            fi
        fi
        
        # Ellenőrizzük újra, hogy minden szükséges fájl megvan-e
        if [ -z "$(ls -A /boot)" ] || ! ls /boot/vmlinuz-linux-zen &> /dev/null || ! ls /boot/initramfs-linux-zen.img &> /dev/null; then
            echo "KRITIKUS HIBA: Nem sikerült helyreállítani a /boot mappát!"
            return 1
        else
            echo "A /boot mappa sikeresen helyreállítva."
        fi
    else
        echo "A /boot mappa rendben van."
    fi
    
    return 0
}

echo "CPU microcode külön ellenőrzése és telepítése..."
if [[ $(lscpu | grep "AMD" -c) -gt 0 ]]; then
    echo "AMD CPU észlelve, microcode telepítése és ellenőrzése..."
    pacman -S amd-ucode --noconfirm
    # Ellenőrizzük, hogy az ucode fájl létezik-e a /boot mappában
    if [ ! -f /boot/amd-ucode.img ]; then
        echo "amd-ucode.img másolása a /boot mappába..."
        cp /usr/lib/firmware/amd-ucode.img /boot/ 2>/dev/null || echo "FIGYELEM: Nem sikerült az amd-ucode.img másolása"
        # Ha nem sikerült másolni, próbáljuk újratelepíteni
        if [ ! -f /boot/amd-ucode.img ]; then
            echo "amd-ucode újratelepítése és másolása a /boot mappába..."
            pacman -S amd-ucode --noconfirm
            cp /usr/lib/firmware/amd-ucode.img /boot/ 2>/dev/null || echo "HIBA: Nem sikerült az amd-ucode.img másolása"
        fi
    fi
elif [[ $(lscpu | grep "Intel" -c) -gt 0 ]]; then
    echo "Intel CPU észlelve, microcode telepítése és ellenőrzése..."
    pacman -S intel-ucode --noconfirm
    # Ellenőrizzük, hogy az ucode fájl létezik-e a /boot mappában
    if [ ! -f /boot/intel-ucode.img ]; then
        echo "intel-ucode.img másolása a /boot mappába..."
        cp /usr/lib/firmware/intel-ucode.img /boot/ 2>/dev/null || echo "FIGYELEM: Nem sikerült az intel-ucode.img másolása"
        # Ha nem sikerült másolni, próbáljuk újratelepíteni
        if [ ! -f /boot/intel-ucode.img ]; then
            echo "intel-ucode újratelepítése és másolása a /boot mappába..."
            pacman -S intel-ucode --noconfirm
            cp /usr/lib/firmware/intel-ucode.img /boot/ 2>/dev/null || echo "HIBA: Nem sikerült az intel-ucode.img másolása"
        fi
    fi
fi

# Hívjuk meg az ellenőrző függvényt a bootloader telepítése után
check_boot_directory || echo "FIGYELMEZTETÉS: A /boot helyreállítása sikertelen. A rendszer talán nem tud majd elindulni."

# Calamares eltávolítása
echo "Calamares eltávolítása..."
pacman -Rs calamares --noconfirm

echo "Telepítés befejezve!"