#!/bin/sh

# Only run for the 'wan' interface
[ "$INTERFACE" = "wan" ] || exit 0

logger -t "wan-bypass" "Event: $ACTION on $INTERFACE (Device: $DEVICE)"

TABLE_ID="200"
TABLE_NAME="wan_bypass"
BYPASS_SUBNET="192.168.4.0/24"

# Determine device name (fallback to eth1 if empty)
DEV="$DEVICE"
[ -z "$DEV" ] && DEV="eth1"

update_route() {
    # Wait for DHCP to fully settle
    sleep 5
    
    # Try multiple methods to get gateway
    GATEWAY=$(ip route show dev $DEV | grep 'default via' | awk '{print $3}')
    
    if [ -z "$GATEWAY" ]; then
        # Fallback: check ubus
        GATEWAY=$(ubus call network.interface.wan status 2>/dev/null | jsonfilter -e '@["route"][0]["nexthop"]')
    fi
    
    if [ -z "$GATEWAY" ]; then
        # Fallback: check uci
        GATEWAY=$(uci -q get network.wan.gateway)
    fi

    if [ -n "$GATEWAY" ]; then
        ip route flush table $TABLE_ID 2>/dev/null
        ip route add default via $GATEWAY dev $DEV table $TABLE_ID
        ip rule show | grep -q "from $BYPASS_SUBNET lookup $TABLE_ID" || \
        ip rule add from $BYPASS_SUBNET table $TABLE_ID priority 100
        logger -t "wan-bypass" "SUCCESS: Route added via $GATEWAY"
    else
        logger -t "wan-bypass" "FAIL: No gateway found for $DEV"
    fi
}

case "$ACTION" in
    ifup)
        update_route
        ;;
    ifdown)
        ip route flush table $TABLE_ID 2>/dev/null
        logger -t "wan-bypass" "Flushed routing table on ifdown"
        ;;
esac
