#!/bin/bash

ctwx_file="/tmp/ctwx_qos.sh"
start_file="/tmp/ctwx_start_qos.sh"
stop_file="/tmp/ctwx_stop_qos.sh"

host_name=$(cat /tmp/.efuse_sn 2>/dev/null)

# 清理旧文件
#rm -f "$ctwx_file" "$start_file" "$stop_file"

# 任务生效时间
start_hour=23
start_minute=59
stop_hour=17
stop_minute=59

# 限速百分比
LIMIT_PERCENT=30

# 限速任务列表
SEARCH_KEYWORDS="16913 46939"

usage() {
  local me
  me=$(basename "$0")
  echo "用法：$me [LIMIT_PERCENT] [SEARCH_KEYWORDS] [\"HH:MM~HH:MM\"]" >&2
  echo >&2
  echo "参数说明：" >&2
  echo "  1) LIMIT_PERCENT   1~100 的整数" >&2
  echo "  2) SEARCH_KEYWORDS 长度>5的字符串;含空格需加引号" >&2
  echo "  3) 时间区间       24小时制,格式 HH:MM~HH:MM" >&2
  echo >&2
  echo "示例：" >&2
  echo "  $me" >&2
  echo "  $me 60" >&2
  echo "  $me 50 \"16913 42639\"" >&2
  echo "  $me 40 \"16913 42639\" \"19:01~22:05\"" >&2
}

# -h 帮助
if [[ "$1" == "-h" ]]; then
  usage
  exit 0
fi


# 参数1：必须是 1~100 的整数
if [[ $# -ge 1 && -n "$1" ]]; then
  if [[ "$1" =~ ^[0-9]+$ ]] && (( 10#$1 >= 1 && 10#$1 <= 100 )); then
    LIMIT_PERCENT="$1"
	echo "LIMIT_PERCENT：$1"
  else
    echo "错误：参数1必须是1~100的整数，当前是：$1"
	usage
    exit 1
  fi
fi

# 参数2：字符串且长度 > 5（含空格需用引号传入）
if [[ $# -ge 2 ]]; then
  arg2="$2"
  if (( ${#arg2} > 5 )); then
    SEARCH_KEYWORDS="$arg2"
	echo "SEARCH_KEYWORDS：$2"
  else
    echo "错误：参数2必须是长度>5的字符串，当前是：$2"
	usage
    exit 1
  fi
fi

# 参数3：时间区间，格式必须为 HH:MM~HH:MM（24小时制）
if [[ $# -ge 3 ]]; then
  arg3="$3"
  if [[ "$arg3" =~ ^([01][0-9]|2[0-3]):([0-5][0-9])~([01][0-9]|2[0-3]):([0-5][0-9])$ ]]; then
    start_hour="${BASH_REMATCH[1]}"
    start_minute="${BASH_REMATCH[2]}"
    stop_hour="${BASH_REMATCH[3]}"
    stop_minute="${BASH_REMATCH[4]}"
    # 规范为十进制数，避免后续算术遇到前导0问题
    start_hour=$((10#$start_hour))
    start_minute=$((10#$start_minute))
    stop_hour=$((10#$stop_hour))
    stop_minute=$((10#$stop_minute))
	echo "timerange：$3"
  else
    echo "错误：参数3格式必须为 HH:MM~HH:MM（示例：19:01~22:05），当前是：$arg3"
	usage
    exit 1
  fi
fi

if [ ! -e "$ctwx_file" ] || [ ! -e "$start_file" ] || [ ! -e "$stop_file" ]; then
  for i in $(seq 1 10); do
    # 下载全部三个文件
    echo "[$(date)] 第 $i 次尝试下载脚本..." >&2

    curl -s --connect-timeout 10 --max-time 30 \
	  http://tw06d0006.onething.net/liuyi/ctwx_qos.sh \
	  -o "$ctwx_file"

    curl -s --connect-timeout 10 --max-time 30 \
	  http://tw06d0006.onething.net/liuyi/ctwx_qos_start.sh \
	  -o "$start_file"

    curl -s --connect-timeout 10 --max-time 30 \
	  http://tw06d0006.onething.net/liuyi/ctwx_qos_stop.sh \
	  -o "$stop_file"

    # 检查所有文件是否下载成功
    if [ -s "$ctwx_file" ] && [ -s "$start_file" ] && [ -s "$stop_file" ]; then

	  # === 去除 Windows 换行符 ===
	  sed -i 's/\r$//' "$ctwx_file"
	  sed -i 's/\r$//' "$start_file"
	  sed -i 's/\r$//' "$stop_file"
	  # ==========================

	  chmod +x "$ctwx_file" "$start_file" "$stop_file"
	  echo "[$(date)] 脚本下载成功并已修复换行符。" >&2
	  break
    else
	  echo "[$(date)] 下载失败或文件为空，30 秒后重试" >&2
	  sleep 30
	  continue
    fi
  done
fi

if [[ "$i" -eq 10 ]]; then
  echo "failed: download error after retries" >&2
  exit 1
fi

# 只在 CTWX 设备上设置定时任务
case "$host_name" in
  CTWX*)
	# 当前时间（分钟）
	now_h=$(date +%H)
	now_m=$(date +%M)
	now=$((10#$now_h*60 + 10#$now_m))

	# 区间端点（分钟）
	start=$((10#$start_hour*60 + 10#$start_minute))
	stop=$((10#$stop_hour*60 + 10#$stop_minute))

	# 判断是否在区间内 [start, stop)；跨午夜时用“或”
	in_range=0
	if (( start <= stop )); then
	  (( now >= start && now < stop )) && in_range=1
	else
	  (( now >= start || now < stop )) && in_range=1
	fi
	
	# out_range：当前时间位于 stop 后 15 分钟内
    out_range=0
    delta=$(( (now - stop + 24*60) % (24*60) ))
    if (( delta <= 15 )); then
      out_range=1
    fi

	# 执行
	if (( in_range )); then
	  /bin/bash "$start_file" "$LIMIT_PERCENT" "$SEARCH_KEYWORDS" > /dev/null 2>&1
	fi

	if (( out_range )); then
	  /bin/bash "$stop_file" "$SEARCH_KEYWORDS" > /dev/null 2>&1
	fi

	echo -n "ok"
	exit 0
	;;
  *)
	# 非 CTWX 设备，直接退出
	exit 0
	;;
esac

