;---ENVIRONMENT---------------------------------------------------------------------
#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
#SingleInstance, Force
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.
CoordMode, ToolTip, Screen
CoordMode, Mouse, Screen
FileEncoding, UTF-8-RAW ; Needed for special symbols that are used in video descritions
#Include %A_ScriptDir%\..\Lib\SharedFunctions.ahk
#Include %A_ScriptDir%\..\Lib\Json.ahk
; #Include %A_scriptdir%\RunCMD.ahk
;---VARIABLES-----------------------------------------------------------------------
global driver
; JSVideoDescription = hey there how goes it
WinActivate, ahk_class Chrome_WidgetWin_1
WinGetTitle, Chrome_Window_Title, A
Chrome_Window_Title := StrSplit(Chrome_Window_Title, " - Google Chrome")
Chrome_Window_Title := Chrome_Window_Title[1]
Driver := ConnectToChrome("", ConnectActiveTab := 1, ActiveTabTitle := Chrome_Window_Title)  ; open new tab page with with specified profile


; This script can be used to connect to your currently active Chrome tab and for quick debugging purposes

;---MAIN SCRIPT---------------------------------------------------------------------
js = document.querySelector('[id^="What's on your mind"]')[0].click(); 
try status := driver.executeScript(js)

ExitApp





ConnectToChrome(URL := "", ConnectActiveTab := 0, WinGetActiveChromeTabTitle := ""){
    ; Msgbox % "WinGetActiveChromeTabTitle: " WinGetActiveChromeTabTitle
    IP_Port := "127.0.0.1:9222"
    IP_Port_Nr := RegExReplace(IP_Port, ".*:(\d*)", "$1")
    if WinExist("ahk_exe Chrome.exe"){
        WinGet, pid, PID, ahk_exe chrome.exe
        for item in ComObjGet("winmgmts:").ExecQuery("SELECT * FROM Win32_Process WHERE ProcessId='" pid "'"){
            if RegExMatch(item.CommandLine, "i)--remote-debugging-port=\K\d+", port){
                break
            }
        }

        if (Port=""){
            MsgBox, 36, ,Chrome Needs to be started in debugging mode in order for Autohotkey to connect to it.`nIs it ok to restart Chrome in debugmode to enable a connection?
            IfMsgBox, Yes
            {
                Message = Restarting Chrome in Debug Mode
                SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")

                While(WinExist("ahk_exe chrome.exe")) {
                    WinClose, ahk_exe chrome.exe
                }
                Process, WaitClose, chrome.exe
            }
            Else{
                Msgbox, 4096, Error, Cannot connect to Chrome profile if it is Not running in debug mode. Script Terminating
                ExitApp
                ; @todo: Make this error out to the script result screen
            }
        }
    }

    ; Establish Variable with Filepath to be used throughout the script
    if(ChromeFilepath = ""){
        if(FileExist("C:\Program Files\Google\Chrome\Application\chrome.exe")){
            ChromeFilepath = C:\Program Files\Google\Chrome\Application\chrome.exe
        }
        else if (FileExist("C:\Program Files (x86)\Google\Chrome\Application\chrome.exe")){
            ChromeFilepath = C:\Program Files (x86)\Google\Chrome\Application\chrome.exe
        }
    }

    if(ChromeFilepath = ""){
        Message = Failed to find chrome.exe in the usual locations.
        SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
        MsgBox 0x30, Error!, Unable to find Chrome.exe in the usual locations. `nScript Exiting. 
        ExitApp
    }

    if(!winExist("ahk_exe chrome.exe")){
        run, %ChromeFilepath% --remote-debugging-port=%IP_Port_Nr% %URL%
    }

    Driver := ComObjCreate("Selenium.ChromeDriver")
    Driver.SetCapability("debuggerAddress", IP_Port)
    try Driver.Start()
    catch e {

        ShowSeleniumErrorMsgbox()

        } ; end of catch

        if(ConnectActiveTab){
            try TotalTabsFound := Driver.Windows.Count
            loop, %TotalTabsFound% {
                try SeleniumActiveTabTitle := Driver.Title

                ; Msgbox % "Title: " Title

                if(InStr(WinGetActiveChromeTabTitle, SeleniumActiveTabTitle)){
                    ; msgbox, window match found
                    break
                }
                try driver.SwitchToNextWindow               ;Focuses Selenium on the newly opened/next window. 


            }

        }

        ; Save current chrome version to ini file
        return Driver
    }
    ; -------------------------------/SChrome_Get-------------------------------
