"""IPC для клика по Windows-toast — файл между процессами, память для UI."""

from __future__ import annotations

import os
import threading
from pathlib import Path

ACTION_FILE = Path(os.environ.get("APPDATA", str(Path.home()))) / "AXON-Dump-Radar" / "notify_action.txt"

_lock = threading.Lock()
_pending_for_js = ""


def queue_notify_action(action: str) -> None:
    """Очередь действия для JS (главный процесс)."""
    action = str(action or "").strip()
    if not action:
        return
    global _pending_for_js
    with _lock:
        _pending_for_js = action


def pop_pending_for_js() -> str:
    """Забрать действие для навигации в UI (вызывает JS через API)."""
    global _pending_for_js
    with _lock:
        action = _pending_for_js
        _pending_for_js = ""
        return action


def send_notify_action(action: str) -> None:
    """Запись из второго процесса (клик по toast) или из главного."""
    action = str(action or "").strip()
    if not action:
        return
    ACTION_FILE.parent.mkdir(parents=True, exist_ok=True)
    ACTION_FILE.write_text(action, encoding="utf-8")


def pop_notify_action() -> str:
    """Прочитать действие из файла (poll-поток главного процесса)."""
    if not ACTION_FILE.exists():
        return ""
    try:
        action = ACTION_FILE.read_text(encoding="utf-8").strip()
    except Exception:
        action = ""
    try:
        ACTION_FILE.unlink(missing_ok=True)
    except Exception:
        pass
    return action


def try_handle_notify_argv(argv: list[str] | None = None) -> bool:
    import sys

    args = argv if argv is not None else sys.argv
    if len(args) < 2:
        return False
    raw = str(args[1] or "").strip().strip('"')
    lower = raw.lower()
    prefix = "axon-dump-radar:"
    if prefix not in lower:
        return False
    idx = lower.index(prefix)
    action = raw[idx + len(prefix) :].strip().split("/")[0].split("?")[0] or "signals"
    send_notify_action(action)
    return True
