#!/bin/sh

# 参数说明
# $1 env                编译环境 local dev
# $2 onlyBuildService   只需要编译的服务，如login，gm
# $3 noPackage          不需要打包 默认需要打包，非空字符串 - 需要打包

# 当前目录
path=$(pwd)
# 打包目录
pkgSlgDir=${path}/pkg/slg

# 引入全局文件
source ${path}/bin/global.sh

# 编译环境
env=$1

# 指定编译某一个程序
onlyBuildService=$2

# 不需要打包
noPackage=$3

# cfg=' -tags=luajit'
cfg=' '
gocmd="/usr/local/go1.22.4.linux-amd64/bin/go"
dlvTag=''
if [ "$env" = "local" ]; then
  gocmd="go"
  dlvTag=' -gcflags=all=-l'
fi


${gocmd} mod tidy


# 创建一些目录 -- 不是指定所有程序时候，才处理目录
if [ -z "${onlyBuildService}" ]; then
    echo "创建打包目录"
    rm -rf pkg/*
    # 创建一些其他需要的目录, 并拷贝资源
    dirList=('bin' 'config' 'images' 'logs' 'lua' 'deploy' 'sql')

    # config需要的子目录 环境目录用 ${env} 直接拷贝
    subConfigs=('env/' 'log/' 'lua/' 'map/' 'all.json' 'application.json' 'ip2region.xdb')

    for myDir in ${dirList[*]}; do
      echo '开始创建目录..' ${myDir}
      mkdir -p ${pkgSlgDir}/${myDir}
      echo '拷贝目录里面的内容'
      if [ "${myDir}" = "bin" ]; then
        cp -r ${myDir}/*.sh ${pkgSlgDir}/${myDir}/
      elif [ "${myDir}" = "config" ]; then
        cp -r ${myDir}/${env}/ ${pkgSlgDir}/${myDir}/

        # 拷贝子目录
        for subConfig in ${subConfigs[@]} ; do
            cp -r ${myDir}/${subConfig} ${pkgSlgDir}/${myDir}/${subConfig}
        done
      elif [ "${myDir}" = "deploy" ]; then
        cp -r ${myDir}/* ${pkgSlgDir}/${myDir}/
      elif [ "${myDir}" = "sql" ]; then
        cp -r ${myDir}/*.sql ${pkgSlgDir}/${myDir}/
      elif [ "${myDir}" != "logs" ]; then
        cp -r ${myDir}/ ${pkgSlgDir}/
      fi
    done
fi

# 批量编译
for service in ${GLOBAL_SERVICES[*]}; do

  # 指定编译某一个时候，其他不编译，不处理
  if [ -n "${onlyBuildService}" ] && [ "${onlyBuildService}" != "${service}" ]; then
     continue
  fi

  echo "编译${service}"
  cd ${path}/${service}
  echo $(pwd)
  echo $(ls)
  # 应用名字
  appName=${GLOBAL_SERVICE_NAME_PREFIX}${service}
  if [ "${service}" = "fight" ]; then
    ${gocmd} build -o ${appName} $dlvTag ${cfg} 2>&1
  else
    ${gocmd} build -o ${appName} $dlvTag 2>&1
  fi
  # copy 到 pkg 目录
  echo "创建执行目录，并拷贝执行程序：${service}"
  mkdir -p ${pkgSlgDir}/${service}
  cp -f ${appName} ${pkgSlgDir}/${service}
done

# 打包执行文件，以及相关静态文件
if [ -z "$noPackage" ]; then
    ${gocmd} mod tidy
    echo $(ls)
    echo "开始打包${env}环境"
    echo "开始路径："
    echo $(pwd)
    cd ${pkgSlgDir}
    cd ../
    echo "打包"
    tar -czvf slg.tar.gz ./slg
    echo "打包完成"
fi

