#!/usr/bin/env python3
"""
Феджи-сторож 2.1 — теперь с правильным чтением имён!
"""
from pythonosc import dispatcher, osc_server
import subprocess
import time

LISTEN_IP = "192.168.2.142"
LISTEN_PORT = 9001

# Все контакты: ключ = полный путь после /avatar/parameters/
CONTACTS = {
    "Touch/Head": "float",
    "Cheese/Slap": "float",
    # Ниже из JSON/лога — Bool-параметры
    "Mayu/HeadPurr": "bool",
    "Mayu/BellyPurr": "bool",
    "Mayu/FeetPurr": "bool",
    "Mayu/CheeseReceiver": "bool",
    "Mayu/CheeseSender": "bool",
    # Если появятся другие — добавь сюда
}

last_notify = 0
COOLDOWN = 2  # секунды между уведомлениями

def notify(title, msg):
    subprocess.call(["notify-send", title, msg, "--icon=vrchat"])

def handle_osc(address, *args):
    global last_notify
    value = args[0] if args else None
    if value is None:
        return

    # Вырезаем полный путь параметра: всё, что после '/avatar/parameters/'
    PREFIX = "/avatar/parameters/"
    if not address.startswith(PREFIX):
        return
    param = address[len(PREFIX):]   # теперь "Touch/Head", "Cheese/Slap", "Mayu/HeadPurr" и т.д.

    # Проверяем, есть ли такой параметр в нашем списке
    if param in CONTACTS:
        ptype = CONTACTS[param]
        triggered = False
        if ptype == "bool" and isinstance(value, bool) and value == True:
            triggered = True
        elif ptype == "float" and isinstance(value, (int, float)) and value > 0.0:
            triggered = True

        if triggered:
            now = time.time()
            if now - last_notify >= COOLDOWN:
                notify("🦊 Прикосновение!", f"{param} = {value}")
                print(f"🔔 Уведомление: {param} = {value}")
                last_notify = now
        # Для отладки можно выводить все срабатывания, даже без уведомления:
        # else:
        #     print(f"🟢 Контакт {param} = {value}")  # если хочешь видеть все значения

if __name__ == "__main__":
    disp = dispatcher.Dispatcher()
    disp.map("/avatar/parameters/*", handle_osc)

    print("🦊 Феджи-сторож 2.1 на посту!")
    print("Отслеживаю:", list(CONTACTS.keys()))
    server = osc_server.ThreadingOSCUDPServer((LISTEN_IP, LISTEN_PORT), disp)
    try:
        server.serve_forever()
    except KeyboardInterrupt:
        print("\n🦊 Мягкой тебе шёрстки, Реджик!")
