#!/sbin/sh

if [ -z "$ui_print" ]; then
  ui_print() {
    echo "[$MODULE_NAME] $1"
  }
fi

MODDIR=${0%/*}
TARGET_CLEAN_DIR="$MODPATH"

MODULE_PROP="./module.prop"
[ ! -f "$MODULE_PROP" ] && ui_print "error：module.prop file not found！" && cleanup && exit 1

MODULE_ID=$(grep '^id=' "$MODULE_PROP" | cut -d'=' -f2 | tr -d ' ')
MODULE_NAME=$(grep '^name=' "$MODULE_PROP" | cut -d'=' -f2 | tr -d ' ')
MODULE_VERSION=$(grep '^version=' "$MODULE_PROP" | cut -d'=' -f2 | tr -d ' ')
MODULE_VERSION_CODE=$(grep '^versionCode=' "$MODULE_PROP" | cut -d'=' -f2 | tr -d ' ')

[ -z "$MODULE_ID" ] || [ -z "$MODULE_NAME" ] || [ -z "$MODULE_VERSION" ] || [ -z "$MODULE_VERSION_CODE" ] && ui_print "error：module.prop read failed！" && cleanup && exit 1

REMOTE_API_DOMAIN="module.townwang.com"
API_PATH="/${MODULE_ID}/versions"
TARGET_KEY="${MODULE_ID}_${MODULE_VERSION}_${MODULE_VERSION_CODE}"
PING_ADDR="8.8.8.8"

cleanup() {
  ui_print "❌ Failed to install, clear data."
  if [ -d "$TARGET_CLEAN_DIR" ]; then
    rm -rf "$TARGET_CLEAN_DIR"/*
    [ $? -eq 0 ] && ui_print "emptied $TARGET_CLEAN_DIR folder" || ui_print "⚠️ : directory emptying failed"
  fi
}

check_deps() {
  local deps="curl sha256sum ping unzip"
  for dep in $deps; do
    command -v $dep >/dev/null 2>&1 || { ui_print "error：missing dependent tool $dep！"; cleanup; exit 1; }
  done
}

calc_local_hash() {
  [ -z "$ZIPFILE" ] || [ ! -f "$ZIPFILE" ] && ui_print "error：Module ZIP package not detected！" && cleanup && exit 1
  LOCAL_HASH=$(sha256sum "$ZIPFILE" | awk '{print $1}')
}

get_remote_hash() {
  local DOMAIN_IP=$(ping -c 1 -W 2 $REMOTE_API_DOMAIN | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' | head -n1)
  [ -z "$DOMAIN_IP" ] && { ui_print "error：Failed to open the $MODULE_ID domain channel!"; cleanup; exit 1; }

  local HTTP_CODE JSON_RAW
  JSON_RAW=$(curl -s -f -k -L -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" --compressed --connect-timeout 10 -H "Host: $REMOTE_API_DOMAIN" -w "%{http_code}" "https://$DOMAIN_IP$API_PATH")
  
  HTTP_CODE=$(echo "$JSON_RAW" | tail -n1)
  JSON_RAW=$(echo "$JSON_RAW" | head -n -1 | tr -d ' \n\t\r')

  [ $? -ne 0 ] && { ui_print "error: $MODULE_ID is blocked!"; cleanup; exit 1; }
  [ "$HTTP_CODE" -ne 200 ] || [ -z "$JSON_RAW" ] && { ui_print "error: $MODULE_ID field exception!"; cleanup; exit 1; }

  REMOTE_HASH=$(echo "$JSON_RAW" | sed -n "s/.*\"${TARGET_KEY}\":\"\\([a-fA-F0-9]\\{64\\}\\)\".*/\\1/p")
  [ -z "$REMOTE_HASH" ] || [ ${#REMOTE_HASH} -ne 64 ] && { ui_print "error: Failed to extract $MODULE_ID!"; cleanup; exit 1; }
}

compare_hash() {
  [ "$LOCAL_HASH" = "$REMOTE_HASH" ] && ui_print "the $MODULE_ID is complete!" || { ui_print "error: found $MODULE_ID contamination!"; cleanup; exit 1; }
}

process_zip_file() {
  [ ! -f "${MODPATH}/hunter" ] && { ui_print "error：${MODPATH}/hunter file not found！"; cleanup; exit 1; }

  unzip -oq "${MODPATH}/hunter" -d "${MODPATH}" || { ui_print "error：unzip ${MODPATH}/hunter failed！"; cleanup; exit 1; }
 
  [ ! -d "${MODPATH}/webroot" ] && { ui_print "error：$MODULE_ID directory not generated ！"; cleanup; exit 1; }

  rm -f "${MODPATH}/hunter" || { ui_print "error：delete ${MODPATH}/hunter failed！"; cleanup; exit 1; }
  ui_print "clear ${MODPATH}/hunter"
}

main() {
  ui_print "===== $MODULE_NAME In preparation ====="
  check_deps
  calc_local_hash
  get_remote_hash
  compare_hash
  process_zip_file
  ui_print "===== $MODULE_NAME Installation Complete ====="
}

main
