#!/bin/bash

ISOS="linux astra windows tech"
SELECTOR_linux='.name == "Alma Linux 8" or .name=="Debian 12" or .name =="Ubuntu 24.04"'
SELECTOR_astra='.name == "Astra Linux SE 1.7.4 (vanilla-base-mg1.0.0)" or .name == "Astra Linux SE 1.8.3 Base (Orel) mg1.0.0" or .name == "Astra Linux SE 1.8.1.uu2 Base (Orel) mg1.0.0"'
SELECTOR_windows='.name == "Windows Server 2022" or .name=="Windows 11"'
SELECTOR_tech='.name == "System Rescue CD" or .name == "Tiny System Rescue CD"'
LINK_linux="https://ru.download.ispsystem.com/OSTemplate/vm6"
LINK_windows="https://ru.download.ispsystem.com/OSTemplate/vm6"
LINK_astra="https://ru.download.ispsystem.com/OSTemplate/vm6/astra"
LINK_tech="https://ru.download.ispsystem.com/OSTemplate/vm6/tech"
CURDIR="$(pwd)"
DOWNLOAD="$CURDIR/temp/download"

for ISO in $ISOS; do
  echo -n "Making $ISO iso ...... "
  SELECTOR="SELECTOR_${ISO}"
  LINK="LINK_${ISO}"
  mkdir -p "$DOWNLOAD/OSTemplate/vm6/$ISO"
  cd "$DOWNLOAD/OSTemplate/vm6/$ISO"
  wget -q ${!LINK}/metadata.json -O master_metadata.json
  NEED_SKIP=1
  while read line
  do
    IMAGE_UPDATE_DATE=$(date -u -d "$line" '+%s')
    if [ ! -f "$CURDIR/$ISO.updated_at" ]; then
      NEED_SKIP=0
      continue
    else
      DIFFDATE=$(cat "$CURDIR/$ISO.updated_at")
    fi
    if [ "$IMAGE_UPDATE_DATE" -gt "$DIFFDATE" ]; then
      NEED_SKIP=0
    fi
  done <<< $(cat master_metadata.json | jq -r ".os[] | select (${!SELECTOR})|.updated_at")
  if [ "$NEED_SKIP" -eq "1" ]; then
    if [ -f "$CURDIR/$ISO.iso" ]; then
      cd $CURDIR
      rm -rf "$CURDIR/temp"
      echo "Skipped"
      continue
    fi
  fi
  cat << EOF > metadata.json
{
        "type": "os",
        "os": 
EOF
  cat master_metadata.json | jq -r ".os |  map(select (${!SELECTOR}))" >> metadata.json
  echo '}' >> metadata.json
  cat master_metadata.json | jq -r ".os[] | select (${!SELECTOR})|.file_name" | while read line
  do
    wget -q ${!LINK}/$line
  done
  cat master_metadata.json | jq -r ".os[] | select (${!SELECTOR})|.install_script.file_name" | while read line
  do
    wget -q ${!LINK}/$line
  done
  rm master_metadata.json
  # making install
  cd $DOWNLOAD
  mkdir -p debs docker_images
  wget -q https://ru.download.ispsystem.com/6/vm/cc/scripts/install_ostemplates.sh -O install.sh
  sed -i "s/__ISO__/$ISO/" install.sh
  wget -q https://ru.download.ispsystem.com/6/vm/cc/docker_images/download-2022.03.31.tar.gz -O docker_images/download-2022.03.31.tar.gz
  wget -q https://ru.download.ispsystem.com/6/vm/cc/packages/vmmanager6_astra_base.tar.gz -O - | tar xzf - -C ./
  cd $DOWNLOAD/../
  genisoimage -allow-limited-size -l -r -iso-level 4 -o "$CURDIR/$ISO.iso" download  > /dev/null 2>&1
  md5sum "$CURDIR/$ISO.iso" | awk '{print $1}' > "$CURDIR/$ISO.md5"
  rm -rf "$CURDIR/temp"
  echo "$(date -u '+%s')" > "$CURDIR/$ISO.updated_at"
  echo "OK"
done
