#!/bin/bash

INSTANCE_NAME="[LG] webOS TV OLED65G5WUA"
SERVICE_TYPE="_airplay._tcp"

echo "Resolving TV details for: $INSTANCE_NAME"

# 1. Use dns-sd -L with a timeout to find the hostname
echo "Step 1: Looking up hostname..."
TMP_LOOKUP=$(mktemp)

# Start lookup in background
dns-sd -L "$INSTANCE_NAME" "$SERVICE_TYPE" . > "$TMP_LOOKUP" 2>/dev/null &
LOOKUP_PID=$!

# Wait up to 3 seconds for results
for i in {1..30}; do
    if grep -q "can be reached at" "$TMP_LOOKUP"; then
        break
    fi
    sleep 0.1
done

kill $LOOKUP_PID 2>/dev/null

LOOKUP_LINE=$(grep "can be reached at" "$TMP_LOOKUP" | head -n 1)
rm "$TMP_LOOKUP"

if [ -z "$LOOKUP_LINE" ]; then
    echo "[!] Could not resolve hostname. The TV might be in a deep sleep mode."
    exit 1
fi

# Extract hostname (it's the word after 'at' and before the port)
HOSTNAME=$(echo "$LOOKUP_LINE" | awk -F' at ' '{print $2}' | awk -F':' '{print $1}')

echo "[+] Hostname found: $HOSTNAME"

# 2. Resolve Hostname to IP
echo "Step 2: Resolving IP address..."
IP=$(ping -c 1 "$HOSTNAME" 2>/dev/null | grep -E -o "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" | head -n 1)

if [ -z "$IP" ]; then
    # Try one more time with dns-sd -G
    IP=$(dns-sd -G v4 "$HOSTNAME" . 2>/dev/null | awk 'NR>4 && $1!="" {print $5; exit}')
fi

if [ -z "$IP" ]; then
    echo "[!] Could not get IP for $HOSTNAME."
    exit 1
fi

echo "[+] TV Found at IP: $IP"
echo "--------------------------------------------------------"

# 3. Check webOS Services
echo "Checking webOS services on $IP..."
for port in 3000 7000 8001 9970; do
    if nc -zv -w 1 "$IP" $port 2>&1 | grep -q succeeded; then
        case $port in
            3000) echo "  [OPEN] Port 3000: webOS Remote API" ;;
            7000) echo "  [OPEN] Port 7000: AirPlay" ;;
            8001) echo "  [OPEN] Port 8001: Google Cast" ;;
            9970) echo "  [OPEN] Port 9970: Control Interface" ;;
        esac
    fi
done
