#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Вспомогательный скрипт для подбора координат для config.json.
Запустите его, затем наведите мышь на нужный элемент в окне мессенджера
и нажмите клавишу — в консоль выведется позиция мыши.
Для координат ОТНОСИТЕЛЬНО окна: сначала активируйте окно мессенджера,
запустите скрипт и кликайте по элементам — скрипт покажет и экранные координаты,
и координаты относительно активного окна (если доступно).
"""

import sys
import time
import platform
from pathlib import Path

def get_cursor_pos():
    import pyautogui
    return pyautogui.position()

def get_active_window_rect():
    """Позиция активного окна (Windows: через pygetwindow, Linux: wmctrl)."""
    if platform.system() == "Windows":
        try:
            import pygetwindow as gw
            w = gw.getActiveWindow()
            if w:
                return (w.left, w.top, w.width, w.height)
        except Exception:
            pass
        return None
    try:
        import subprocess
        out = subprocess.run(["xdotool", "getactivewindow", "getwindowgeometry"], capture_output=True, text=True, timeout=2)
        if out.returncode != 0:
            return None
        # Parse "Position: 100,200 (screen: 0)\nDimensions: 400x300"
        pos = dim = None
        for line in out.stdout.strip().splitlines():
            if line.startswith("Position:"):
                part = line.split("(", 1)[0].replace("Position:", "").strip()
                a, b = part.split(",")
                pos = (int(a.strip()), int(b.strip()))
            elif line.startswith("Dimensions:"):
                part = line.split(":", 1)[1].strip()
                w, h = part.split("x")
                dim = (int(w), int(h))
        if pos and dim:
            return (pos[0], pos[1], dim[0], dim[1])
    except Exception:
        pass
    return None


if __name__ == "__main__":
    print("Координаты обновляются в реальном времени. Остановка: Ctrl+C")
    try:
        while True:
            time.sleep(0.2)
            x, y = get_cursor_pos()
            rect = get_active_window_rect()
            if rect:
                rel_x = x - rect[0]
                rel_y = y - rect[1]
                print(f"\rЭкран: ({x}, {y})  |  Относительно окна: ({rel_x}, {rel_y})   ", end="", flush=True)
            else:
                print(f"\rЭкран: ({x}, {y})   ", end="", flush=True)
    except KeyboardInterrupt:
        print("\nГотово.")
