#!/bin/sh
. /lib/functions.sh
. /usr/share/openclash/openclash_ps.sh

set_lock() {
   exec 881>"/tmp/lock/openclash_history_get.lock" 2>/dev/null
   flock -x 881 2>/dev/null
}

del_lock() {
   flock -u 881 2>/dev/null
   rm -rf "/tmp/lock/openclash_history_get.lock"
}

close_all_conection() {
   SECRET=$(uci -q get openclash.config.dashboard_password)
   LAN_IP=$(uci -q get network.lan.ipaddr |awk -F '/' '{print $1}' 2>/dev/null || ip addr show 2>/dev/null | grep -w 'inet' | grep 'global' | grep 'brd' | grep -Eo 'inet [0-9\.]+' | awk '{print $2}' | head -n 1)
   PORT=$(uci -q get openclash.config.cn_port)
   curl -m 2 -H "Authorization: Bearer ${SECRET}" -H "Content-Type:application/json" -X DELETE http://"$LAN_IP":"$PORT"/connections >/dev/null 2>&1
}

if [ "$1" = "close_all_conection" ]; then
   close_all_conection
   exit 0
fi

CONFIG_FILE=$(unify_ps_cfgname)
CONFIG_NAME=$(echo "$CONFIG_FILE" |awk -F '/' '{print $4}' 2>/dev/null)
small_flash_memory=$(uci -q get openclash.config.small_flash_memory)
HISTORY_PATH_OLD="/etc/openclash/history/${CONFIG_NAME%.*}"
HISTORY_PATH="/etc/openclash/history/${CONFIG_NAME%.*}.db"
CACHE_PATH_OLD="/etc/openclash/.cache"
if [ "$small_flash_memory" != "1" ]; then
   CACHE_PATH="/etc/openclash/cache.db"
else
   CACHE_PATH="/tmp/etc/openclash/cache.db"
fi
set_lock

if [ -z "$CONFIG_FILE" ] || [ ! -f "$CONFIG_FILE" ]; then
   CONFIG_FILE=$(uci get openclash.config.config_path 2>/dev/null)
   CONFIG_NAME=$(echo "$CONFIG_FILE" |awk -F '/' '{print $5}' 2>/dev/null)
   HISTORY_PATH_OLD="/etc/openclash/history/${CONFIG_NAME%.*}"
   HISTORY_PATH="/etc/openclash/history/${CONFIG_NAME%.*}.db"
fi

if [ -n "$(pidof clash)" ] && [ -f "$CONFIG_FILE" ]; then
   if [ -f "$CACHE_PATH" ]; then
      cmp -s "$CACHE_PATH" "$HISTORY_PATH"
      if [ "$?" -ne "0" ]; then
         cp "$CACHE_PATH" "$HISTORY_PATH" 2>/dev/null
      fi
   fi
   if [ -f "$CACHE_PATH_OLD" ]; then
      cmp -s "$CACHE_PATH_OLD" "$HISTORY_PATH_OLD"
      if [ "$?" -ne "0" ]; then
         cp "$CACHE_PATH_OLD" "$HISTORY_PATH_OLD" 2>/dev/null
      fi
   fi
fi

del_lock