# SPDX-License-Identifier: GPL-2.0
# Copyright (C) 2025 ALTEMU (https://www.altemu.ru)
# Based on automount script from ROCKNIX project:
# https://github.com/ROCKNIX/distribution

#!/bin/bash

# Переменные путей
EXTERNAL_MOUNT_POINT="/storage/games-external"
INTERNAL_MOUNT_POINT="/storage/games-internal"
OVERLAYFS_MOUNT_POINT="/storage/roms"
LOWERDIR_ROMS="/storage/games-internal/roms"
UPPERDIR_ROMS="/storage/games-external/roms"
WORKDIR="/.tmp/games-workdir"

# Создаем необходимые директории
mkdir -p "$EXTERNAL_MOUNT_POINT" "$INTERNAL_MOUNT_POINT" "$OVERLAYFS_MOUNT_POINT" "$UPPERDIR_ROMS" "$LOWERDIR_ROMS"

check_storage() {
# Перебираем устройства хранения
for DEV in $(lsblk -l -o NAME,MOUNTPOINT | awk '$2 == ""' | grep "$1"p[0-9]);
do
    # Определим файловую систему устройства
    FILESYSTEM=$(blkid -o value -s TYPE /dev/"$DEV")
    case "$FILESYSTEM" in
        ext4)
        echo "$DEV with $FILESYSTEM FS. Mounting as external"
            MOUNT_POINT="$EXTERNAL_MOUNT_POINT"
            ;;
        exfat|ntfs)
        echo "$DEV with $FILESYSTEM FS. Mounting as internal"
            MOUNT_POINT="$INTERNAL_MOUNT_POINT"
            ;;
        *)
            echo "Файловая система '$FILESYSTEM' не поддерживается."
            continue
    esac
    # Монтируем устройство
    if [[ "$MOUNT_POINT"=="$INTERNAL_MOUNT_POINT" ]];then
    mount -o uuid=altlinux,gid=altlinux,umask=006 /dev/"$DEV" "$MOUNT_POINT" 
    else
    mount /dev/"$DEV" "$MOUNT_POINT"
    fi
    # Проверяем наличие каталога roms внутри смонтированного раздела
    if [ -d "$MOUNT_POINT" ]; then
        echo "Каталог "$LOWERDIR_ROMS" найден на устройстве $DEVICE, монтируем в точку $MOUNT_POINT."
        # Создаем OverlayFS
        mkdir -p "$EXTERNAL_MOUNT_POINT"/.tmp/games-workdir
        mount -t overlay overlay \
          -o lowerdir="$LOWERDIR_ROMS":/usr/share/roms:/home/altlinux/storage/roms,upperdir="$UPPERDIR_ROMS",workdir="$EXTERNAL_MOUNT_POINT""$WORKDIR" \
          "$OVERLAYFS_MOUNT_POINT"
        echo "OverlayFS успешно создана!"
    else
        echo "Каталог "$LOWERDIR_ROMS" не обнаружен на устройстве '$DEVICE'."
        # Размонтируем устройство обратно
        umount "$MOUNT_POINT"
    fi
done
}

check_overlayfs() {
# Проверяем, создался ли overlayfs. Если его нет, монтируем каталог с играми из каталогов на накопителе
OVERLAYFS_OK=$(mount | grep overlay)

if [[ -z $OVERLAYFS_OK ]]; then
    echo "OverlayFS не обнаружена. Монтируем каталог с играми из домашнего каталога"
    cp -r /usr/share/roms/* /home/altlinux/storage
    mount --bind /home/altlinux/storage /storage
else
    echo "Всё хорошо!"
fi
}

umount /storage/roms
umount /storage/games-internal
umount /storage/games-external

check_storage
check_overlayfs

# Делаем владельцем каталога storage пользователя altlinux
chown -R altlinux:altlinux /storage

