#!/bin/sh

# Время старта скрипта (в секундах с начала эпохи)
start_time=$(date +%s)

# Временная метка
timestamp=$(date +"%Y%m%d_%H%M%S")
# Лог-файл с временной меткой
log_file="/tmp/ec_remove_partitions_$timestamp.log"
# Глобальный этап миграции
step="di_partman_early_command"
# Heart beat сервер
hb_url="http://repo.redtux.su/hb"
# Имя хоста
hostname=$(hostname)
# Функция для вывода в консоль и запись в лог-файл
log() {
    echo "$1"
    echo "$1" >> "$log_file"
}

# Перенаправление вывода в файл лога
#exec > "$log_file" 2>&1

log "==================================================================="
log "==== Preseed Partman Early Command script (network). Version 2 ===="
log "==================================================================="


# Текущий elapsed_time
current_time=$(date +%s)
elapsed_time=$((current_time - start_time))
# Heart beat
wget --timeout=5 --tries=2 "$hb_url/?step=$step&state=start&action=ec_remove_part&elapsed=$elapsed_time&hostname=$hostname" -q -O /dev/null || true

# Получаем параметр install_mode из /proc/cmdline
install_mode=$(tr ' ' '\n' < /proc/cmdline | grep '^install_mode=' | cut -d'=' -f2)
install_mode=$(echo $install_mode | cut -c1-2)
# Если install_mode не задан — выводим ошибку и перезагружаем систему
if [ -z "$install_mode" ]; then
    . /usr/share/debconf/confmodule
    cat > /tmp/InstallModeError.template <<'!EOF!'
Template: install-mode/error
Type: error
Description: ERROR - install_mode parameter is missing.
 The installation cannot continue without specifying install_mode.
 Please check boot parameters in GRUB configuration.
 Remove installation media.
 System will reboot now.
!EOF!
    debconf-loadtemplate install-mode /tmp/InstallModeError.template
    while true; do
        db_title Install Mode Missing
        db_input critical install-mode/error || true
        db_go
        /sbin/shutdown -r now
        sleep 10
    done
fi

log "install_mode detected: $install_mode"

boot_disk=""
partitions=""

# Получение идентификатора раздела, содержащего слово "migrate" и форматированного в NTFS
fullname=$(blkid | grep -i migrate | grep -i ntfs | cut -f 1 -d ":")
# Определение диска на основе формата идентификатора раздела
boot_disk=$(
if [ "${fullname#*"/dev/n"}" != "$fullname" ]; then
    echo "$fullname" | head -c12
else
    echo "$fullname" | head -c8
fi)
# Получение списка разделов на диске
partitions=$(blkid | grep "$boot_disk" | grep -i partuuid)

# Проверка, что раздел migrate определен
if [ -z "$fullname" ]; then
    log "Error: Unable to determine partition with label 'migrate'"
else
    log "Partition with label 'migrate' identified: $fullname"
fi

# Проверка, что диск определен
if [ -z "$boot_disk" ]; then
    log "Error: Unable to determine boot_disk"
else
    log "Disk identified: $boot_disk"
fi

# Проверка, что список разделов не пуст
if [ -z "$partitions" ]; then
    log "Error: No partitions found on boot_disk $boot_disk"
else
    log "Partitions on boot_disk $boot_disk: $partitions"
fi

# Удаление разделов в зависимости от режима
if [ "$install_mode" = "sb" ] || [ "$install_mode" = "sb_lvrm" ]; then
    log "Mode 'sb': removing ALL partitions"
    echo "$partitions" | while IFS= read -r part; do
        part_path=$(echo "$part" | cut -f 1 -d ':')
        part_num=$(echo "$part_path" | grep -o '[0-9]*$')
        label=$(blkid -o value -s LABEL "$part_path" | tr '[:upper:]' '[:lower:]')
        fstype=$(blkid -o value -s TYPE "$part_path" | tr '[:upper:]' '[:lower:]')

        log "Removing partition '$part_path' (label='$label', fs='$fstype')"
        parted -s "$boot_disk" rm "$part_num"
        log "Deleted: $boot_disk partition $part_num"
    done

elif [ "$install_mode" = "db" ]; then
    log "Mode 'db': removing only partition with label 'migrate'"
    fullname=$(blkid | grep -i migrate | grep -i ntfs | cut -f 1 -d ":")
    if [ -n "$fullname" ]; then
        part_num=$(echo "$fullname" | grep -o '[0-9]*$')
        log "Removing migrate partition: $fullname"
        parted -s "$boot_disk" rm "$part_num"
        log "Deleted migrate partition: $fullname"
    else
        log "WARNING: migrate partition not found, nothing to remove"
    fi

else
    log "INFO: install_mode=$install_mode (no partition removal rule defined)"
fi

# Текущий elapsed_time
current_time=$(date +%s)
elapsed_time=$((current_time - start_time))
# Heart beat
wget --timeout=5 --tries=2 "$hb_url/?step=$step&state=stop&action=ec_remove_part&elapsed=$elapsed_time&hostname=$hostname" -q -O /dev/null || true
exit 0

