#!/bin/bash

log_tag="dde-session-shell-launch-binary"
log_line() {
    local priority="$1"
    shift
    local message="$*"
    if command -v systemd-cat >/dev/null 2>&1; then
        printf '%s\n' "$message" | systemd-cat -t "$log_tag" -p "$priority"
    elif command -v logger >/dev/null 2>&1; then
        logger -t "$log_tag" -p "user.$priority" -- "$message"
    else
        printf '%s\n' "$message" 1>&2
    fi
}

# 设置QT缩放相关的环境变量
greeter_display_setting_path="/usr/bin/greeter-display-setting"
if [ -f $greeter_display_setting_path ]; then
    scale_env=$(/usr/bin/greeter-display-setting | tail -1)
    export $scale_env
else
    log_line warning "$greeter_display_setting_path does not exist, can't do scale"
fi

# 判断是否有脚本需要在greeter之前调用
pre_greeter_out=$(/usr/share/dde-session-shell/greeters.d/pre-greeter)
exit_code=$?
exec_path=$(printf "%b\n" "$pre_greeter_out" | tail -1)

if [[ $exit_code == 0 ]]; then
    log_line info "Pre-greeter path is: $exec_path"
    $exec_path
else
    log_line info "There is nothing to do before start greeter"
fi

# 启动greeter
# greeter没正常退出的情况下，会重新拉起greeter，最多尝试10次
start_lightdm_deepin_greeter() {
  log_line info "-lightdm-deepin-greeter starting..."
  local retries=0
  local max_retries=10
  while true; do
      /usr/bin/lightdm-deepin-greeter
      exit_status=$?
      # 143 为收到kill信号后退出码
      if [ $exit_status -eq 0 ] || [ $exit_status -eq 143 ]; then
          log_line info "-lightdm-deepin-greeter exit code: $exit_status"
          break
      else
          current_time=$(date '+%Y-%m-%d %H:%M:%S')
          retries=$((retries + 1))
          log_line warning "$current_time: -lightdm-deepin-greeter exited with non-zero status. Restarting... ($retries/$max_retries)"
          if [ $retries -ge $max_retries ]; then
              log_line err "$current_time: -lightdm-deepin-greeter reached max retries ($max_retries), giving up."
              return $exit_status
          fi
      fi
  done
}

dde-dconfig --get -a org.deepin.dde.lightdm-deepin-greeter -r org.deepin.dde.lightdm-deepin-greeter -k enableLighterGreeter | grep "true"
if [ $? -eq 0 ];then
    /usr/bin/lightdm-deepin-greeter-lighter

    # 没正常退出的情况下，仍然拉起原版Greeter
    if [ $? -ne 0 ];then
        start_lightdm_deepin_greeter
    fi
else
    start_lightdm_deepin_greeter
fi
