#!/bin/sh

echo "=== Скрипт переключения приема SMS (Модем <-> Роутер) ==="

IFACE=""
for i in $(ls /sys/class/net/ 2>/dev/null | grep -E '^(eth|usb)[0-9]+$'); do
	driver_path=$(readlink -f "/sys/class/net/$i/device/driver" 2>/dev/null)
	if echo "$driver_path" | grep -qE 'cdc_ether|rndis_host'; then
		IFACE="$i"
		break
	fi
done

if [ -z "$IFACE" ]; then
	echo "Ошибка: Сетевой интерфейс модема (cdc_ether/rndis_host) не найден."
	exit 1
fi

MODEM_IP=$(ip route show dev "$IFACE" 2>/dev/null | awk '/default/ {print $3}')

if [ -z "$MODEM_IP" ]; then
	echo "Ошибка: Не удалось определить IP адрес модема на интерфейсе $IFACE."
	exit 1
fi

echo "Найден интерфейс: $IFACE, IP модема: $MODEM_IP"

echo ""
if ! command -v adb >/dev/null 2>&1; then
	echo "Ошибка: Утилита adb не установлена в системе."
	exit 1
fi

echo "Подключаемся к модему через ADB..."
adb connect "$MODEM_IP" >/dev/null 2>&1
sleep 2

ADB_DEV=$(adb devices | grep "$MODEM_IP" | grep -w "device" | awk '{print $1}' | head -n 1)

if [ -z "$ADB_DEV" ]; then
	echo "Ошибка: Не удалось подключиться к модему ($MODEM_IP) по ADB."
	echo "Возможно, ADB выключен на модеме."
	exit 1
fi

echo "Успешное подключение к ADB: $ADB_DEV"

echo ""
echo "Проверяем текущее состояние маршрутизации SMS..."

MAX_RETRIES=5
RETRY_COUNT=0
SMS_EXISTS=0
BACKUP_EXISTS=0

while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do
	HAS_SMS=$(adb -s "$ADB_DEV" shell "ls /app/bin/sms 2>/dev/null" 2>/dev/null | tr -d '\r')
	HAS_BACKUP=$(adb -s "$ADB_DEV" shell "ls /app/bin/sms_backup 2>/dev/null" 2>/dev/null | tr -d '\r')

	if echo "$HAS_SMS" | grep -q "/app/bin/sms"; then
		SMS_EXISTS=1
	fi

	if echo "$HAS_BACKUP" | grep -q "/app/bin/sms_backup"; then
		BACKUP_EXISTS=1
	fi

	if [ $SMS_EXISTS -eq 1 ] || [ $BACKUP_EXISTS -eq 1 ]; then
		break
	fi

	RETRY_COUNT=$((RETRY_COUNT + 1))
	if [ $RETRY_COUNT -lt $MAX_RETRIES ]; then
		echo "Получен пустой ответ, попытка $RETRY_COUNT из $MAX_RETRIES. Переподключаемся к ADB..."
		adb disconnect "$MODEM_IP" >/dev/null 2>&1
		sleep 1
		adb connect "$MODEM_IP" >/dev/null 2>&1
		sleep 2
	fi
done


echo ""
if [ $SMS_EXISTS -eq 0 ] && [ $BACKUP_EXISTS -eq 1 ]; then
	echo "-> Текущий статус: SMS принимаются РОУТЕРОМ."
	echo "   (В веб-интерфейсе модема они не отображаются)."
	printf "Хотите переключить прием SMS на ВЕБ-ИНТЕРФЕЙС МОДЕМА? (y/n) "
	read -r ANSWER
	if [ "$ANSWER" = "y" ] || [ "$ANSWER" = "Y" ]; then
		echo "Выполняем переключение..."
		adb -s "$ADB_DEV" shell "mv /app/bin/sms_backup /app/bin/sms"
		
		echo ""
		echo "Перезагружаем модем для применения настроек (AT^RESET)..."
		adb -s "$ADB_DEV" shell "atc at^reset" >/dev/null 2>&1
		echo "Модем ушел в перезагрузку! Готово."
		echo ""
		echo "=== Скрипт завершен ==="
	else
		echo "Отмена операции."
	fi

elif [ $SMS_EXISTS -eq 1 ]; then
	echo "-> Текущий статус: SMS принимаются ВЕБ-ИНТЕРФЕЙСОМ МОДЕМА."
	echo "ВНИМАНИЕ: Если переключить на роутер, новые SMS НЕ БУДУТ приходить в интерфейс модема."
	printf "Хотите переключить прием SMS на РОУТЕР? (y/n) "
	read -r ANSWER
	if [ "$ANSWER" = "y" ] || [ "$ANSWER" = "Y" ]; then
		echo "Выполняем переключение..."
		adb -s "$ADB_DEV" shell "mv /app/bin/sms /app/bin/sms_backup"
		
		echo ""
		echo "Перезагружаем модем для применения настроек (AT^RESET)..."
		adb -s "$ADB_DEV" shell "atc at^reset" >/dev/null 2>&1
		echo "Модем ушел в перезагрузку! Готово."
		echo ""
		echo "=== Скрипт завершен ==="
	else
		echo "Отмена операции."
	fi

else
	echo "ОШИБКА: Не найден ни файл /app/bin/sms, ни /app/bin/sms_backup."
	echo "Возможно, прошивка модема имеет другую структуру или не поддерживает этот метод переключения."
	echo ""
	echo "=== Скрипт завершен ==="
	exit 1
fi

