#!/bin/bash
#241211 totiks
#260131 sfs
[ "`whoami`" != "root" ] && { pkexec ${0} "${@}" ; exit ; } || export XDG_RUNTIME_DIR=/run/user/$(loginctl list-sessions --no-legend | awk '$4 ~ /seat[0-9]+/ && ! /root/ {print $2}' | sort -u)
export TEXTDOMAIN=zram-tools-gui
# Путь для конфигурации zramswap
CONFIG_FILE="/etc/default/zramswap"
! modprobe zram && { yad --image=gtk-dialog-error --name=gtk-dialog-error \
    --button=yad-ok \
    --text="$(gettext 'Kernel') `uname -r` $(gettext 'does not support ZRAM')" --fixed --title="ZRAM $(gettext 'Error')" ;\
    exit 1 ; }
# Установить умолчания
DEFAULT_ALGO="`sed -n 's/.*\[\([^]]*\)].*/\1/p' /sys/block/zram0/comp_algorithm`"
ALGO2="`sed 's/[][]//g' /sys/block/zram0/comp_algorithm |tr " " "!" |sed 's/!$//'`"
DEFAULT_PERCENT="30"
DEFAULT_PRIORITY="100"

# Функция для загрузки текущих значений конфигурации
load_zram_config() {
    if [[ -f "$CONFIG_FILE" ]]; then
        source "$CONFIG_FILE"
    fi

    # Устанавливаем значения по умолчанию, если переменные пусты
    ALGO="${ALGO:-$DEFAULT_ALGO}"
    PERCENT="${PERCENT:-$DEFAULT_PERCENT}"
    PRIORITY="${PRIORITY:-$DEFAULT_PRIORITY}"
}

# Загрузка текущей конфигурации
load_zram_config

# Диалог с параметрами
#aa="qq qq"
#systemctl is-active zramswap  || y1=--button=Старт!gtk-media-play!"${aa}":2
#m1="Старт"
m1="$(gettext 'Start')"
systemctl is-active zramswap  || y1="--button=$m1!gtk-media-play!systemctl start zramswap.service:2"
m2="$(gettext 'Stop')"
systemctl is-active zramswap  && y2="--button=$m2!gtk-media-stop!systemctl stop zramswap.service:4"
systemctl is-enabled zramswap || y3="--button=$(gettext 'ON')!gtk-add!systemctl enable zramswap.service:6"
m4="$(gettext 'OFF')"
systemctl is-enabled zramswap && y4='--button='$m4'!gtk-remove!"systemctl_disable_zramswap.service":8  '

t="$(gettext '<b>Swap on zram RAM disk with on-the-fly compression</b>')
$(gettext 'If there is not enough RAM, set 150%')"

t2="<span font='Mono' size='small'>
`free -hL`
 
`swapon`

`zramctl`
 
`systemctl status zramswap |sed 's/<//g'`
</span>"

yad_output=$(yad --mouse --form --title="Swap in Zram" \
    --Xfixed --image-on-top --height=500 --width=800 \
    --text="$t" \
    --image=swap --window-icon=/usr/share/pixmaps/swap.png --name=swap \
    --field=":TXT" "`echo "$t2" |grep -v '^$'`" \
    --field="										$(gettext 'Compression Algorithm')!max speed: lz4 > zstd > lzo
max compression: zstd > lzo > lz4:CB" "${ALGO}!$ALGO2" \
    --field="										$(gettext 'Allocated % of memory!The amount of RAM for ZRAM as a percentage of total RAM'):NUM" "${PERCENT}:1:100:1:0" \
    --field="										$(gettext 'Priority!Higher number = higher priority. Must be higher than the swap to hdd/ssd.'):NUM" "${PRIORITY}:1:1000:1" \
    "$y1"  \
    "$y2"  \
    "$y3"  \
    "$y4"  \
    --button=$(gettext 'Apply')!gtk-apply!"systemctl restart zramswap.service":0 \
    --button=yad-cancel:1)
ret="$?"
#echo $ret "$yad_output" ;exit
[ $ret -eq 1 ] || [ $ret -eq 252 ]  &&   exit 0  # Пользователь отменил

# Разбираем вывод yad
algorithm=$(echo "$yad_output" | awk -F'|' '{print $2}')
memory_percent=$(echo "$yad_output" | awk -F'|' '{print $3}')
priority=$(echo "$yad_output" | awk -F'|' '{print $4}')

# Проверяем, что все поля заполнены
if [[ -z "$algorithm" || -z "$memory_percent" || -z "$priority" ]]; then
    yad --text="$(gettext 'Fill in all fields.')" --width=300 --height=100 --title="$(gettext 'Error')"
    exit 1
fi

# Функция для создания конфигурации zram
create_zram_config() {
    local algorithm=$1
    local memory_percent=$2
    local priority=$3

    # Преобразуем memory_percent в целое число
    memory_percent=$(echo "$memory_percent" | sed 's/,/./')
    memory_percent=$(awk '{printf "%d", $1}' <<< "$memory_percent")

    # Редактируем конфигурационный файл
    sed -i "s/^#ALGO=.*/ALGO=$algorithm/" "$CONFIG_FILE"
    sed -i "s/^#PERCENT=.*/PERCENT=$memory_percent/" "$CONFIG_FILE"
    sed -i "s/^#PRIORITY=.*/PRIORITY=$priority/" "$CONFIG_FILE"

    sed -i "s/^ALGO=.*/ALGO=$algorithm/" "$CONFIG_FILE"
    sed -i "s/^PERCENT=.*/PERCENT=$memory_percent/" "$CONFIG_FILE"
    sed -i "s/^PRIORITY=.*/PRIORITY=$priority/" "$CONFIG_FILE"

    # Отображаем обновленную конфигурацию
#    echo "Конфигурация для zram обновлена:"
    cat "$CONFIG_FILE"
}

# Создаем конфигурацию
create_zram_config "$algorithm" "$memory_percent" "$priority"

# Запуск службы zramswap
systemctl daemon-reload
[ $ret -eq 0 ] && systemctl restart zramswap.service
[ $ret -eq 2 ] && systemctl start   zramswap.service
[ $ret -eq 4 ] && systemctl stop    zramswap.service
[ $ret -eq 6 ] && systemctl enable  zramswap.service
[ $ret -eq 8 ] && systemctl disable zramswap.service
$0


exit
# Проверка статуса службы zramswap
if systemctl is-active --quiet zramswap.service; then
    status_message="Служба zramswap активирована."
else
    status_message="Служба zramswap не активирована."
fi

# Получение информации из zramctl
zram_info="$(/usr/sbin/zramctl)"

# Выводим статус службы и информацию zramctl в окно yad
yad --center --text="${status_message}\n\nИнформация zramctl:\n\n${zram_info}" \
    --title="Статус службы zramswap" --width=600 --height=400 --button="Закрыть:0"
