"""Stellt das Tibia-Fenster passend zum Bot-Bildschirm ein.

Der Bot rechnet mit einem Spielbereich von genau 1920x1080. Laeuft der
Client als normales Fenster, bleiben davon nur 1904x1041 uebrig - Rahmen
und Titelleiste fressen den Rest. OBS skaliert das dann auf 1920x1080
hoch, wodurch jede Vorlagensuche (Pfeile am Spielfenster) und jede feste
Pixel-Koordinate leicht daneben liegt.

Darum vor jedem Bot-Start: randlos, exakt auf den gewaehlten Bildschirm.
Wird bewusst NUR fuer das Bot-Profil aufgerufen - das normale Spielprofil
bleibt unangetastet.
"""
import json
import os
import sys
from pathlib import Path

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

from src.utils.display import getSelectedDisplay

options_path = (
    Path(os.environ['LOCALAPPDATA'])
    / 'Tibia' / 'packages' / 'Tibia' / 'conf' / 'clientoptions.json'
)

raw = options_path.read_bytes()
had_bom = raw.startswith(b'\xef\xbb\xbf')
data = json.loads(raw.decode('utf-8-sig'))

display = getSelectedDisplay()
wanted = {
    'clientWindowHeight': int(display['height']),
    'clientWindowWidth': int(display['width']),
    'clientWindowPositionX': int(display['x']),
    'clientWindowPositionY': int(display['y']),
    'clientWindowIsBorderless': True,
    'clientWindowIsMaximized': False,
    'clientWindowScreenName': display['device'],
}
before = data.get('clientWindowOptions')
data['clientWindowOptions'] = wanted

# Maussteuerung festnageln.
#
# Der Bot benutzt Gegenstaende mit Strg+Links und greift mit Alt+Links an.
# Welche Taste was tut, haengt am Steuerungsschema des Clients. Gemessen
# am laufenden Spiel:
#   Schema 0: Strg+Links oeffnet nur das Kontextmenue -> der Bot bleibt
#             daran haengen (Depot ging nicht auf).
#   Schema 1: Strg+Links benutzt tatsaechlich. Damit klappt die Kette
#             Locker -> DEPOT -> Depot-Truhen.
# Das Schema steht in keiner Oberflaeche des Bots und kann sich beim
# Spielen von Hand verstellen, darum wird es vor jedem Start gesetzt.
BENOETIGTES_SCHEMA = 1
optionen = data.setdefault('options', {})
schema_vorher = optionen.get('controlSchemeIndex')
optionen['controlSchemeIndex'] = BENOETIGTES_SCHEMA

text = json.dumps(data, ensure_ascii=False, indent=2)
options_path.write_bytes(
    (b'\xef\xbb\xbf' if had_bom else b'') + text.encode('utf-8'))

print(json.dumps({
    'ok': True,
    'display': display['device'],
    'before': before,
    'after': wanted,
    'controlScheme': {'before': schema_vorher, 'after': BENOETIGTES_SCHEMA},
}, ensure_ascii=False))
