"""Prueft, ob der laufende Tibia-Client auf dem ausgewaehlten Bildschirm
liegt.

Gibt "ok" aus, wenn das Client-Fenster innerhalb des im Programm
gewaehlten Bildschirms liegt, sonst "mismatch". Kein Client gefunden =
"mismatch" (dann soll der Startablauf ohnehin neu starten).

Der Startablauf nutzt das, um den Client bei einem Bildschirmwechsel neu
zu starten, statt ihn stillschweigend auf dem alten Bildschirm zu lassen.
"""
import sys
from pathlib import Path

repo = Path.home() / 'TibiaPilotNG'
sys.path.insert(0, str(repo))

import win32api
import win32con
import win32gui
import win32process

from src.utils.display import getSelectedDisplay


def _tibia_windows():
    treffer = []

    def sammeln(hwnd, _):
        if not win32gui.IsWindowVisible(hwnd):
            return
        titel = win32gui.GetWindowText(hwnd)
        if titel != 'Tibia' and not titel.startswith('Tibia - '):
            return
        try:
            pid = win32process.GetWindowThreadProcessId(hwnd)[1]
            handle = win32api.OpenProcess(
                win32con.PROCESS_QUERY_LIMITED_INFORMATION, False, pid)
            try:
                bild = win32process.GetModuleFileNameEx(handle, 0).lower()
            finally:
                win32api.CloseHandle(handle)
        except (OSError, win32api.error):
            return
        if bild.endswith(('\\client.exe', '\\tibia.exe')):
            treffer.append(win32gui.GetWindowRect(hwnd))

    win32gui.EnumWindows(sammeln, None)
    return treffer


def main():
    fenster = _tibia_windows()
    if not fenster:
        print('mismatch')
        return
    display = getSelectedDisplay()
    links, oben = display['x'], display['y']
    rechts = links + display['width']
    unten = oben + display['height']
    # Fenstermittelpunkt muss innerhalb des gewaehlten Bildschirms liegen.
    for (l, o, r, u) in fenster:
        mitte_x = (l + r) // 2
        mitte_y = (o + u) // 2
        if links <= mitte_x < rechts and oben <= mitte_y < unten:
            print('ok')
            return
    print('mismatch')


if __name__ == '__main__':
    main()
