#!/bin/bash

REPO_TYPE=stable # Тип репозитория, необходимо заменить на stable или testing, заменяется в job-е Jenkins-а
HOST=update.artix.su
UPDATE=${1:-false} # true - обновление, false - установка (отличаются тем, что при обновлении не добавляются репозитории)

RED='\033[0;31m'
NC='\033[0m' # No Color


check_last_build_date() {
  # копия проверки их КС
  # с 02.04.2026 перед установкой проверяем дату обновления, разрешенную в лицензии
  local 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 artix-lm | grep Build-Date | awk '{print $2}')
      echo "Дата сборки пакета artix-lm: $actualBuildDate"
      if [ -z "$actualBuildDate" ]; then
        echo -e "${YELLOW}Дата сборки artix-lm неизвестна. После установки сервис может работать некорректно${NC}"
        return
      fi
      # эта штука может выбросить ошибку парсинга, но дату обычно возвращает, так что ошибку парсинга можно игнорировать, но лучше не использовать set -e
      lastBuildDate=$(jq -r 'first(.[] | select(.product=="LM")) | .lastBuildDate' $LICENCE_FILE_PATH)
      echo "Дата, до которой доступно обновление: $lastBuildDate"
      if [ -z "$lastBuildDate" ]; then
        echo -e "${YELLOW}Дата последнего доступного обновления неизвестна. После установки сервис может работать некорректно${NC}"
        return
      fi

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

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

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

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

if [[ ${UPDATE} == false ]]; then

	# Если ЛМ устанавливается на отдельную машину (отдельно от КС), то mongo может и не быть
	mongo --eval "db.stats()" >> /dev/null 2>&1
	RESULT=$?
  apt-get install wget -y
	case ${REPO_TYPE} in
	    stable)
	     wget -O - https://update.artix.su/artix.gpg.key | gpg --dearmor > /etc/apt/trusted.gpg.d/artix.gpg -
	     echo 'deb [arch=amd64] https://update.artix.su/lm/ loyalty_testing loyalty' | sudo tee /etc/apt/sources.list.d/loyalty.list
	     ;;
	    prerelease | testing)
	     wget -O - https://update.artix.su/artix.gpg.key | gpg --dearmor > /etc/apt/trusted.gpg.d/artix.gpg -
	     echo 'deb [arch=amd64] https://update.artix.su/cs/ cashserver3_testing cashserver3' | sudo tee /etc/apt/sources.list.d/loyalty.list
	     ;;
	    *)
	     echo -e ${RED}Unknow type repo${NC}
	     exit 1
	esac


	if [[ ${RESULT} == 127 ]]; then
		# для установки mongo добавим репозиторий КЦ
	    URL_CS="https://${HOST}/static/cs/install_scripts/${REPO_TYPE}/cs_env"
		curl ${URL_CS}/add_rep.sh -o /tmp/add_rep_cs.sh
		chmod +x /tmp/add_rep_cs.sh
		/tmp/add_rep_cs.sh ${REPO_TYPE}

		repo_codename=$(lsb_release -sc)

		apt-get update
		if  grep -qs 'avx\b' /proc/cpuinfo; then
			apt-get install mongodb-org mongodb-org-database
		else
			apt-get install mongodb-org=4.4.30 mongodb-org-database-tools-extra=4.4.30 mongodb-org-tools=4.4.30 mongodb-org-mongos=4.4.30 mongodb-org-server=4.4.30 mongodb-org-shell=4.4.30
		fi

	fi
else
	# если запустили обновление ЛМ, то выполним скрипт удаления mongo репозитория, т.к. до него больше нет доступа
	URL_MAIN="https://${HOST}/static/cs/install_scripts/${REPO_TYPE}/main"
	curl ${URL_MAIN}/del_mongo_rep.sh -o /tmp/del_mongo_rep.sh
	chmod +x /tmp/del_mongo_rep.sh
	/tmp/del_mongo_rep.sh
fi

sudo apt-get update

check_last_build_date

sudo apt-get -y install artix-lm

# для ubuntu 18 необходимо добавление mongod в автозапуск
if [[ ${RESULT} == 127 ]] && type systemctl > /dev/null 2>&1; then
    systemctl enable mongod
    systemctl restart mongod
fi
