#!/bin/bash
# Проверка даты сборки устанавливаемого пакета по файлу лицензии.

check_last_build_date() {
  local PACKAGE="artixcs-loyalty-rest"
  local PRODUCT="LM"
  # с 02.04.2026 перед установкой проверяем дату обновления, разрешенную в лицензии
  local LICENCE_FILE_PATH=${LICENCE_FILE_PATH:-/opt/artixcs-lm/licence/licence.li4}
  local START_LICENCE_CHECK_DATE=$(date -d '2026-04-02' +%s)
  local CURRENT_DATE=$(date +%s)
  local NC='\033[0m' # No Color
  local RED='\033[31m'
  local YELLOW='\033[33m'

  if [ -f $LICENCE_FILE_PATH ]; then
    if [ $CURRENT_DATE -gt $START_LICENCE_CHECK_DATE ] || [ $CURRENT_DATE -eq $START_LICENCE_CHECK_DATE ]; then
      # убедимся, что пакет jq есть в системе
      if ! dpkg-query -W -f='${Status}' jq 2>/dev/null | grep -q "ok installed"; then
        apt-get install -y jq
      fi

      echo -e "${YELLOW}Проверка файла лицензии${NC}"

      actualBuildDate=$(apt-cache show --no-all-versions ${PACKAGE} | grep Build-Date | awk '{print $2}')
      echo "Дата сборки пакета ${PACKAGE}: $actualBuildDate"

      if [ -z "$actualBuildDate" ]; then
        echo -e "${YELLOW}Дата сборки ${PACKAGE} неизвестна. После установки сервис может работать некорректно${NC}"
        return 0
      fi

      # эта штука может выбросить ошибку парсинга, но дату обычно возвращает, так что ошибку парсинга можно игнорировать, но лучше не использовать set -e
      lastBuildDate=$(jq -r --arg product "${PRODUCT}" 'first(.[] | select(.product==$product)) | .lastBuildDate' $LICENCE_FILE_PATH)
      echo "Дата, до которой доступно обновление: $lastBuildDate"

      if [ -z "$lastBuildDate" ]; then
        echo -e "${YELLOW}Дата последнего доступного обновления неизвестна. После установки сервис может работать некорректно${NC}"
        return 0
      fi

      lastBuildDateTstmp=$(date -d "$lastBuildDate" +%s)
      actualBuildDateTstmp=$(date -d "$actualBuildDate" +%s)

      version=$(apt-cache show --no-all-versions ${PACKAGE} | grep Version | awk '{print $2}')

      if [ $actualBuildDateTstmp -gt $lastBuildDateTstmp ]; then
        echo -e "${RED}Обновление ${version} не может быть установлено. Дата крайнего релиза, доступного Вам, ограничена файлом лицензии и не может быть > ${lastBuildDate}${NC}"
        return 1
      fi

    fi
  else
    echo -e "${YELLOW}Файл лицензии не найден${NC}"
  fi
}

# если скрипт запущен напрямую, а не подключён через source - сразу выполняем проверку
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
  check_last_build_date "$@" || exit 1
fi
