#!/bin/bash
set -u

BASE_DIR="/root/knowledge/service/task_executor"
PYTHON_BIN="/root/knowledge/service/service_python/bin/python"
LOG_DIR="${BASE_DIR}/logs"
NOW_FILE="$(date '+%F')"
LOG_FILE="${LOG_DIR}/task_${NOW_FILE}.log"
SYSTEMD_SERVICE="yunwo-task-executor.service"
SYSTEMD_ENV_FILE="/etc/yunwo/task-executor-ocr.env"

mkdir -p "${LOG_DIR}"
find "${LOG_DIR}" -type f -name "task_*.log" -mtime +1 -delete

{
  echo "===== $(date '+%F %T') start ====="

  cd "${BASE_DIR}" || exit 1

  echo "[INFO] load task executor environment"
  set -a
  if command -v systemctl >/dev/null 2>&1; then
    while IFS= read -r assignment; do
      case "${assignment}" in
        *=*) export "${assignment}" ;;
      esac
    done < <(systemctl show "${SYSTEMD_SERVICE}" -p Environment --value | tr ' ' '\n')
  fi
  if [ -f "${SYSTEMD_ENV_FILE}" ]; then
    # shellcheck disable=SC1090
    . "${SYSTEMD_ENV_FILE}"
  fi
  set +a
  : "${TASK_OCR_PROVIDER:=siliconflow_deepseek_ocr}"
  export TASK_OCR_PROVIDER
  echo "[INFO] TASK_OCR_PROVIDER=${TASK_OCR_PROVIDER}"

  echo "[INFO] run kill_task.sh"
  /bin/bash "${BASE_DIR}/kill_task.sh"
  KILL_EXIT_CODE=$?
  echo "[INFO] kill_task.sh exit code: ${KILL_EXIT_CODE}"

  echo "[INFO] start task.py in background"
  nohup "${PYTHON_BIN}" "${BASE_DIR}/task.py" >> "${LOG_FILE}" 2>&1 &
  NEW_PID=$!
  echo "[INFO] task.py started, pid=${NEW_PID}"

  sleep 2
  if ps -p "${NEW_PID}" > /dev/null 2>&1; then
    echo "[INFO] task.py is running normally"
    PY_EXIT_CODE=0
  else
    echo "[ERROR] task.py failed to stay alive"
    PY_EXIT_CODE=1
  fi

  echo "===== $(date '+%F %T') end ====="
  echo
} >> "${LOG_FILE}" 2>&1

exit "${PY_EXIT_CODE}"
