"""
AutoPOE2 - Step 1: Return to Hideout from Sandspit (Live Client)
Uses existing Shoreline Hideout portal label or presses '.' to open fresh portal scroll.
"""

import sys
import time
import ctypes
from pathlib import Path

WORKSPACE_ROOT = str(Path(__file__).resolve().parent.parent)
sys.path.insert(0, WORKSPACE_ROOT)

from src.assistant_tool.screen_capturer import ScreenCapturer
from src.common.win32_window import find_poe2_window, ensure_window_focus
from src.assistant_tool.config import Config
from src.assistant_tool.log_watcher import LogWatcher

def log(msg):
    print(f"[Step1_Return] {msg}", flush=True)

def main():
    capturer = ScreenCapturer(output_dir="captures")
    hwnd = find_poe2_window()
    if not hwnd:
        log("ERROR: Could not find POE2 window!")
        return False

    ensure_window_focus(hwnd)
    time.sleep(0.3)

    user32 = ctypes.windll.user32
    VK_OEM_PERIOD = 0xBE  # key '.'
    VK_F = 0x46           # key 'F'
    KEYEVENTF_KEYUP = 0x0002

    def click(x, y, delay=0.3):
        user32.SetCursorPos(int(x), int(y))
        time.sleep(0.12)
        user32.mouse_event(0x0002, 0, 0, 0, 0)
        time.sleep(0.08)
        user32.mouse_event(0x0004, 0, 0, 0, 0)
        time.sleep(delay)

    def press_key(vk, scan=0, delay=0.3):
        user32.keybd_event(vk, scan, 0, 0)
        time.sleep(0.06)
        user32.keybd_event(vk, scan, KEYEVENTF_KEYUP, 0)
        time.sleep(delay)

    log_path = Config.find_poe2_client_log()
    lw = LogWatcher(log_path) if log_path else None
    seeded = lw.seed_latest_playable_zone() if lw else None
    initial_zone = seeded.area_name if seeded else "Sandspit"
    log(f"Current initial zone: '{initial_zone}'")

    # 1. Thử click trực tiếp vào nhãn SHORELINE HIDEOUT tại (2480, 528)
    log("1. Attempting to click Shoreline Hideout portal label at (2480, 528)...")
    click(2480, 528, delay=0.5)
    press_key(VK_F, 0x21, delay=0.5)

    # 2. Đồng thời bấm phím '.' mở Town Portal dự phòng nếu nhãn ở xa
    log("2. Pressing key '.' (VK 0xBE) to ensure Town Portal scroll is active...")
    press_key(VK_OEM_PERIOD, 0x34, delay=1.0)
    
    # Click vị trí portal xuất hiện gần nhân vật (1280, 680) và tương tác phím F
    click(1280, 680, delay=0.4)
    press_key(VK_F, 0x21, delay=0.8)

    log("3. Waiting for zone transition to Shoreline Hideout...")
    returned = False
    for i in range(25):  # Chờ tối đa 12.5s
        time.sleep(0.5)
        if i in (6, 12):
            log(f"Retry interacting with portal (attempt {i//6})...")
            click(2480, 528, delay=0.2)
            click(1280, 680, delay=0.2)
            press_key(VK_F, 0x21, delay=0.3)
        if lw:
            s = lw.seed_latest_playable_zone()
            cur = s.area_name if s else ""
            if "hideout" in cur.lower():
                log(f"SUCCESS: Returned to Hideout! Current zone: '{cur}'")
                returned = True
                break

    p = capturer.capture_screenshot(event_name="STEP1_RETURN_RESULT", capture_ram=False)
    log(f"Captured: {p}")
    return returned

if __name__ == "__main__":
    success = main()
    sys.exit(0 if success else 1)
