#!/bin/sh

# docker-entrypoint-job.sh

BASE_PWD="/home/java-app"

# BASE_PWD=`pwd`
# EANBLED_JOBS="TMP_DM_GENDER,TMP_DM_ORGTYPE,TMP_DM_ACCOUNTTYPE,TMP_DM_IDENTITYTYPE,TMP_ORGANIZE,TMP_PERSON,TMP_ACCOUNT,TMP_REGISTERED_SERVICE,TMP_WEAK_PASSWORD_DICT,TMP_ACCOUNT_QQ,TMP_ACCOUNT_WECHAT,TMP_TB_ORGANIZE,TMP_TB_USER,TMP_TB_ACCOUNT,TMP_TB_USERGROUP,TMP_TB_ROLE,TMP_TB_APPLICATION,TMP_TB_FUNCTION,TMP_TB_RIGHT,TMP_TB_ACCOUNTSECURITYEMAIL,TMP_TB_ACCOUNTSECURITYMOBILE,TMP_REF_ORGANIZEUSER,TMP_REF_USERGROUPACCOUNT,TMP_REF_ACCOUNTROLE,TMP_REF_USERGROUPROLE,TMP_REF_USERROLE,TMP_REF_APPLICATIONROLE,TMP_REF_FUNCTIONROLE,TMP_REF_RIGHTROLE"


replace_file() {
  local file="$1"
  local key="$2"
  local value="$3"
  sed -i "s;\${$key};$value;" $file
}

is_enabled() {
  local file="$1"
  if [ -n "$EANBLED_JOBS" ]; then
    if [ "$EANBLED_JOBS" = "*" ]; then
      echo 1
    fi

    # job_name="1001.job_TMP_DM_GENDER.json"; job_name=${job_name#*job_}; job_name=${job_name%*.json}; echo $job_name;
    job_name=${file}
    job_name=${job_name#*job_};
    job_name=${job_name%*.json};
    # echo $job_name;

    enable=$(echo $EANBLED_JOBS | grep "${job_name}")
    if [[ "$enable" != "" ]]
    then
      echo 1
    else
      echo 0
    fi
  else
    echo 1
  fi
}

# 如果第一个参数是app，那么就启动执行
if [ "$1" = 'app' ]; then

  for job_file in `ls -1 ${BASE_PWD}/datax/job/*.json | sort`; do
    echo "replace_file, job: $job_file"

    enable=$(is_enabled "$job_file")
    echo "job: $job_file enable status is ${enable}"
    if [ "$enable" = "1" ]; then
      echo 'replace'

      if [ -n "$ORACLEREADER_UNIAUTH_USERNAME" ]; then
        replace_file "$job_file" "ORACLEREADER_UNIAUTH_USERNAME" "$ORACLEREADER_UNIAUTH_USERNAME"
      fi
      if [ -n "$ORACLEREADER_UNIAUTH_PASSWORD" ]; then
        replace_file "$job_file" "ORACLEREADER_UNIAUTH_PASSWORD" "$ORACLEREADER_UNIAUTH_PASSWORD"
      fi
      if [ -n "$ORACLEREADER_UNIAUTH_JDBC_URL" ]; then
        replace_file "$job_file" "ORACLEREADER_UNIAUTH_JDBC_URL" "$ORACLEREADER_UNIAUTH_JDBC_URL"
      fi

      if [ -n "$MYSQLWRITER8_TMP_USERNAME" ]; then
        replace_file "$job_file" "MYSQLWRITER8_TMP_USERNAME" "$MYSQLWRITER8_TMP_USERNAME"
      fi
      if [ -n "$MYSQLWRITER8_TMP_PASSWORD" ]; then
        replace_file "$job_file" "MYSQLWRITER8_TMP_PASSWORD" "$MYSQLWRITER8_TMP_PASSWORD"
      fi
      if [ -n "$MYSQLWRITER8_TMP_JDBC_URL" ]; then
        replace_file "$job_file" "MYSQLWRITER8_TMP_JDBC_URL" "$MYSQLWRITER8_TMP_JDBC_URL"
      fi

    else
      echo 'rm'

      rm -rf $job_file
    fi

  done

  set -ex;
  exec /home/java-app/docker-entrypoint.sh app
else
  set -ex;
  exec "$@"
fi

