#!/bin/sh

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

# Обработка параметра региона
region="$1"
alse_ver="$2"
web_server="$3"

if [ -z "$region" ] || [ -z "$alse_ver" ] || [ -z "$web_server" ]; then
  echo "Usage: $0 {msk|nsk|mir} {175|176} {175|176} {alrepo01.bankexp.local|repo.redtux.su}"
  exit 1
fi

# Проверка валидности региона
case "$region" in
    msk|nsk|mir) ;;
    *)
        echo "Invalid region: $region. Use msk, nsk or mir."
        exit 1
        ;;
esac

# Проверка валидности версии и установка переменных
case "$alse_ver" in
    175)
        astra_ver="1-7-5"
        uu_path="uu/1"
        ;;
    176)
        astra_ver="1-7-6"
        uu_path="uu/2"
        ;;
    *)
        echo "Invalid alse_ver value: $alse_ver. Use 175 or 176."
        exit 1
        ;;
esac

# Проверка валидности веб-сервера
case "$web_server" in
    alrepo01.bankexp.local|repo.redtux.su) ;;
    *)
        echo "Invalid web_server value: $web_server. Use alrepo01.bankexp.local or repo.redtux.su."
        exit 1
        ;;
esac

# Построение URL'ов
url="http://${web_server}/migrate/${alse_ver}/scripts"
repo1_base="http://${web_server}/repos/astra/frozen/1-7-x86-64/${astra_ver}/repository-base/"
repo1_extended="http://${web_server}/repos/astra/frozen/1-7-x86-64/${astra_ver}/repository-extended/"
repo1_other="http://${web_server}/repos/other/"

# Временная метка
timestamp=$(date +"%Y%m%d_%H%M%S")
# Лог-файл с временной меткой
log_file="/tmp/lc_log_$timestamp.log"
log_dir="/target/var/log/migration"
script_dir="/target/usr/sbin"

# Глобальный этап миграции
step="di_late_command"
# Heart beat сервер
hb_url="http://repo.redtux.su/hb"

# Имя хоста
hostname=$(hostname)

# Список скриптов
scripts="first_boot"

# Функция для вывода в консоль и запись в лог-файл
log() {
    echo "$1"               # Вывод на консоль
    echo "$1" >> "$log_file" # Запись в лог-файл
}

log "=========================================================="
log "==== Preseed Late Command script (Network). Version 1 ===="
log "=========================================================="
log "=================Region $region==========================="
# Текущий 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=lc_create_rc&elapsed=$elapsed_time&hostname=$hostname" -q -O /dev/null || true

# Создание каталога логов, если он не существует
if [ ! -d "$log_dir" ]; then
    log "Creating log directory: $log_dir"
    if ! mkdir -p "$log_dir"; then
        log "Error: Failed to create log directory."
    else
        log "Log directory created successfully."
    fi
else
    log "Log directory already exists: $log_dir"
fi

# Монтирование efivarfs и удаление файлов dump* ***
log "Attempting to mount efivarfs to /sys/firmware/efi/efivars..."
if [ -d /sys/firmware/efi/efivars ]; then
    if mount -t efivarfs efivarfs /sys/firmware/efi/efivars 2>/dev/null; then
        log "efivarfs mounted successfully."
        log "Removing dump* files from /sys/firmware/efi/efivars..."
        if ls /sys/firmware/efi/efivars/dump* >/dev/null 2>&1; then
            rm -f /sys/firmware/efi/efivars/dump* 2>/dev/null
            log "dump* files removed successfully."
        else
            log "No dump* files found."
        fi
    else
        log "Error: Failed to mount efivarfs."
    fi
else
    log "Directory /sys/firmware/efi/efivars does not exist, likely Legacy BIOS system."
fi

# Создание сервиса first-boot.service
log "Creating first-boot.service..."
cat <<EOL > /target/etc/systemd/system/first-boot.service
[Unit]
Wants=network-online.target
After=network-online.target systemd-udev-settle.service

[Service]
Type=simple
ExecStart=/usr/sbin/first_boot $region $alse_ver $web_server --preconfigure
RemainAfterExit=yes
Restart=on-failure
RestartSec=60s
SuccessExitStatus=0

[Install]
WantedBy=multi-user.target
EOL

if [ -f /target/etc/systemd/system/first-boot.service ]; then
    log "first-boot.service created successfully."
else
    log "Error: Failed to create first-boot.service."
fi

# Добавление репозиториев ALSE
log "Creating sources.list..."
cat <<EOL > /target/etc/apt/sources.list
deb [trusted=yes] $repo1_base 1.7_x86-64 main contrib non-free
deb [trusted=yes] $repo1_extended 1.7_x86-64 main contrib non-free
deb [trusted=yes] $repo1_other ./
EOL

# Загрузка и установка скриптов
for script in $scripts; do
    log "Downloading and setting up $script from url: $url/$script"
    if ! wget -q "$url/$script" -O "$script_dir/$script"; then
        log "Error: Failed to download $script."
    else
        chmod +x "$script_dir/$script"
        log "$script downloaded and made executable."
    fi
done

# Копирование файлов логов
log "Copying log files to $log_dir..."
if ! cp /tmp/lc_*.log "$log_dir/" || ! cp /tmp/ec_*.log "$log_dir/"; then
    log "Error: Failed to copy log files."
else
    log "Log files copied successfully."
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=lc_create_rc&elapsed=$elapsed_time&hostname=$hostname" -q -O /dev/null || true
exit 0

