#!/bin/bash
# Arch R — Memory Manager
# Configures ZRAM swap and manages memory for optimal gaming performance.
#
# Usage:
#   archr-memory-manager setup    — Configure and enable ZRAM swap
#   archr-memory-manager stop     — Disable ZRAM swap
#   archr-memory-manager status   — Show memory/swap status

ZRAM_SIZE_MB=128
ZRAM_ALGO="lzo"

log() { logger -t archr-mem "$1"; }

setup_swap() {
    # Skip if already active
    if swapon --show=NAME --noheadings | grep -q zram; then
        log "ZRAM swap already active"
        return 0
    fi

    # Load zram module
    modprobe zram num_devices=1 2>/dev/null

    # Wait for device
    for i in $(seq 1 10); do
        [ -e /sys/block/zram0 ] && break
        sleep 0.1
    done

    if [ ! -e /sys/block/zram0 ]; then
        log "ERROR: zram0 device not found"
        return 1
    fi

    # Configure
    echo "$ZRAM_ALGO" > /sys/block/zram0/comp_algorithm
    echo "$((ZRAM_SIZE_MB * 1024 * 1024))" > /sys/block/zram0/disksize

    # Format and enable
    mkswap /dev/zram0 >/dev/null 2>&1
    swapon -p 100 /dev/zram0

    log "ZRAM swap enabled: ${ZRAM_SIZE_MB}MB ($ZRAM_ALGO)"
}

stop_swap() {
    swapoff /dev/zram0 2>/dev/null
    echo 1 > /sys/block/zram0/reset 2>/dev/null
    log "ZRAM swap disabled"
}

show_status() {
    echo "=== Memory Status ==="
    free -h
    echo ""
    echo "=== Swap Devices ==="
    swapon --show 2>/dev/null || echo "No swap active"
    echo ""
    if [ -e /sys/block/zram0 ]; then
        echo "=== ZRAM ==="
        echo "Algorithm: $(cat /sys/block/zram0/comp_algorithm 2>/dev/null)"
        echo "Disk size: $(cat /sys/block/zram0/disksize 2>/dev/null) bytes"
        echo "Compressed: $(cat /sys/block/zram0/mm_stat 2>/dev/null | awk '{print $2}') bytes"
    fi
}

case "${1:-setup}" in
    setup)  setup_swap ;;
    stop)   stop_swap ;;
    reload) stop_swap; setup_swap ;;
    status) show_status ;;
    *)      echo "Usage: archr-memory-manager {setup|stop|reload|status}" ;;
esac
