#!/bin/bash
set -e

ROOT_PART=$(findmnt -no SOURCE /)
ROOT_DISK=$(lsblk -no PKNAME $ROOT_PART)
TARGET_DISK=$(lsblk -dpno NAME | grep -v "$ROOT_DISK" | grep -v "sr0" | head -n 1)
VG_NAME="vg_safesquid"

if ! pvs | grep -q "$TARGET_DISK"; then
    echo "Initializing LVM on $TARGET_DISK..."
    pvcreate -f $TARGET_DISK
    vgcreate $VG_NAME $TARGET_DISK
    
    TOTAL_MB=$(vgs --noheadings -o vg_free --units m $VG_NAME | awk '{print int($1)}')
    
    create_lv() {
        local pct=$1
        local min=$2
        local max=$3
        local name=$4
        
        local target=$(( TOTAL_MB * pct / 100 ))
        
        if [ "$target" -lt "$min" ]; then
            target=$min
        elif [ "$max" -gt 0 ] && [ "$target" -gt "$max" ]; then
            target=$max
        fi
        
        echo "Creating $name: Target=${target}MB"
        lvcreate -L ${target}M -n $name $VG_NAME
    }
    
    # Params:     PCT    MIN_MB   MAX_MB    LV_NAME
    create_lv     12     2048     51200     lv_home         # 12%, min 2G, max 50G
    create_lv     2      512      10240     lv_usr_local    # 2%, min 512M, max 10G
    create_lv     4      1024     20480     lv_var_lib      # 4%, min 1G, max 20G
    create_lv     2      512      2048      lv_opt          # 2%, min 512M, max 2G
    create_lv     7      2048     51200     lv_var_cache    # 7%, min 2G, max 50G
    create_lv     2      512      10240     lv_var_www      # 2%, min 512M, max 10G
    create_lv     15     2048     51200     lv_var_db       # 15%, min 2G, max 50G
    
    # Ensure at least 500MB is available for /var/log
    FREE_MB=$(vgs --noheadings -o vg_free --units m $VG_NAME | awk '{print int($1)}')
    if [ "$FREE_MB" -lt 500 ]; then
        echo "Error: Not enough space left for /var/log (Needs 500MB, has ${FREE_MB}MB)"
        exit 1
    fi
    
    # /var/log gets 100% of whatever free space is remaining
    lvcreate -l 100%FREE -n lv_var_log $VG_NAME
    
    # Format to ext4
    for lv in home usr_local var_lib opt var_cache var_www var_db var_log; do
        mkfs.ext4 /dev/$VG_NAME/lv_$lv
    done
    
    # Create mount points
    mkdir -p /usr/local/safesquid /var/lib/safesquid /opt/safesquid /var/cache/safesquid /var/log/safesquid /var/www/safesquid /var/db/safesquid
    
    # Add to fstab for persistence
    echo "/dev/$VG_NAME/lv_home /home ext4 defaults 0 2" >> /etc/fstab
    echo "/dev/$VG_NAME/lv_usr_local /usr/local/safesquid ext4 defaults 0 2" >> /etc/fstab
    echo "/dev/$VG_NAME/lv_var_lib /var/lib/safesquid ext4 defaults 0 2" >> /etc/fstab
    echo "/dev/$VG_NAME/lv_opt /opt/safesquid ext4 defaults 0 2" >> /etc/fstab
    echo "/dev/$VG_NAME/lv_var_cache /var/cache/safesquid ext4 defaults,noatime,nodiratime 0 2" >> /etc/fstab
    echo "/dev/$VG_NAME/lv_var_www /var/www/safesquid ext4 defaults 0 2" >> /etc/fstab
    echo "/dev/$VG_NAME/lv_var_db /var/db/safesquid ext4 defaults,noatime 0 2" >> /etc/fstab
    echo "/dev/$VG_NAME/lv_var_log /var/log/safesquid ext4 defaults,noatime 0 2" >> /etc/fstab
    
    # Mount all
    mount -a
    
    # Set ownership for SafeSquid directories
    chown -R ssquid:ssquid /usr/local/safesquid /var/lib/safesquid /opt/safesquid /var/cache/safesquid /var/log/safesquid /var/www/safesquid /var/db/safesquid
fi
