; Mosis Designer Diagnostic Script
; AutoHotkey v2
; Outputs window information without user interaction

#Requires AutoHotkey v2.0

; Simple config (inline to avoid include issues)
WINDOW_TITLE := "Mosis Designer"
PHONE_WIDTH := 540
PHONE_HEIGHT := 960

; Output file
outputFile := A_ScriptDir . "\diagnose_output.txt"

; Clear previous output
if (FileExist(outputFile))
    FileDelete(outputFile)

; Helper to write output
WriteOutput(msg) {
    FileAppend(msg . "`n", outputFile)
}

WriteOutput("=== Mosis Designer Diagnostic ===")
WriteOutput("Time: " . A_Now)
WriteOutput("")

; Find window
hwnd := WinExist(WINDOW_TITLE)

if (!hwnd) {
    WriteOutput("ERROR: Window '" . WINDOW_TITLE . "' not found")
    WriteOutput("")
    WriteOutput("Looking for any GLFW windows...")

    ; Try to find any GLFW window
    windows := WinGetList()
    for wnd in windows {
        title := WinGetTitle(wnd)
        class := WinGetClass(wnd)
        if (InStr(class, "GLFW") || InStr(title, "Mosis") || InStr(title, "Designer")) {
            WriteOutput("Found candidate: " . wnd . " - Title: " . title . " - Class: " . class)
        }
    }
    ExitApp()
}

WriteOutput("Window found!")
WriteOutput("HWND: " . hwnd)

; Get window info
title := WinGetTitle(hwnd)
class := WinGetClass(hwnd)
WinGetPos(&winX, &winY, &winW, &winH, hwnd)

WriteOutput("Title: " . title)
WriteOutput("Class: " . class)
WriteOutput("Position: X=" . winX . " Y=" . winY)
WriteOutput("Size: W=" . winW . " H=" . winH)

; Estimate client area
; For GLFW windows, borders are typically small
; Let's try different estimates

WriteOutput("")
WriteOutput("=== Client Area Estimates ===")

; Method 1: Standard Windows decorations
borderW := 8
titleH := 31
clientX1 := winX + borderW
clientY1 := winY + titleH
WriteOutput("Estimate 1 (standard border): X=" . clientX1 . " Y=" . clientY1)

; Method 2: Minimal border (GLFW often uses this)
borderW2 := 1
titleH2 := 1
clientX2 := winX + borderW2
clientY2 := winY + titleH2
WriteOutput("Estimate 2 (minimal border): X=" . clientX2 . " Y=" . clientY2)

; Method 3: No border (borderless window)
WriteOutput("Estimate 3 (no border): X=" . winX . " Y=" . winY)

; Calculate expected phone area size vs actual window
WriteOutput("")
WriteOutput("=== Size Analysis ===")
WriteOutput("Expected phone size: " . PHONE_WIDTH . "x" . PHONE_HEIGHT)
WriteOutput("Actual window size: " . winW . "x" . winH)

expectedW := PHONE_WIDTH + (2 * 8)  ; borders
expectedH := PHONE_HEIGHT + 31 + 8   ; title + border
WriteOutput("Expected window size (with decorations): " . expectedW . "x" . expectedH)

; Check if window is maximized or has different size
if (winW > PHONE_WIDTH + 50 || winH > PHONE_HEIGHT + 100) {
    WriteOutput("WARNING: Window seems larger than expected - may be scaled or maximized")
}

; Try a click test (won't do anything without activation, but log coordinates)
WriteOutput("")
WriteOutput("=== Click Coordinate Test ===")

; Phone center
phoneX := 270
phoneY := 480

; Convert to screen (using estimate 1)
screenX := clientX1 + phoneX
screenY := clientY1 + phoneY
WriteOutput("Phone center (270, 480) -> Screen (" . screenX . ", " . screenY . ")")

; Phone app icon position
phoneAppX := 67
phoneAppY := 120
screenAppX := clientX1 + phoneAppX
screenAppY := clientY1 + phoneAppY
WriteOutput("Phone app icon (67, 120) -> Screen (" . screenAppX . ", " . screenAppY . ")")

WriteOutput("")
WriteOutput("=== Diagnostic Complete ===")
WriteOutput("Output written to: " . outputFile)

ExitApp()
