
; -------------------------------Functions-------------------------------

OnMsgBoxConfirmChromiumOverwrite() {
	DetectHiddenWindows, On
	Process, Exist
	If (WinExist("ahk_class #32770 ahk_pid " . ErrorLevel)) {
		ControlSetText Button1, Cancel
		ControlSetText Button2, Yes
	}
}

; https://www.autohotkey.com/docs/v2/Functions.htm#Variadic
Join(sep, params*) {
	For index, param in params
		str .= param . sep
	return SubStr(str, 1, -StrLen(sep))
}


CheckLBRYProcess(){
	; Check if LBRY Process exists
	Process, Exist,LBRY.exe
	if(ErrorLevel = 0) ; if doesn't exist
	{
		Message = Not Running. Starting up LBRY.exe
		SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile")

		LBRYExeFilepath = C:\Program Files\LBRY\LBRY.exe
		if(!FileExist(LBRYExeFilepath)){
			Message = Failed to Find LBRY.exe executable. LBRY not installed? 
			SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
			Return
		}

		Message = Checking LBRY daemon_settings.yml file for Odysee Wallet Servers
		SaveOrPostProgress(Message:=Message,PostType:=",ErrorLoggingTextFile,DiscordErrorLogging")

		FileRead, daemon_settingsFileContent, C:\Users\%A_UserName%\AppData\Local\lbry\lbrynet\daemon_settings.yml

		if(!InStr(daemon_settingsFileContent, "a-hub1.odysee.com")){
			Message = Odysee wallet server is not in daemon_settings.yml. Replacing File with required settings.
			SaveOrPostProgress(Message:=Message,PostType:=",DiscordErrorLogging")

			LBRYDaemonSettingsFP = C:\Users\%A_UserName%\AppData\Local\lbry\lbrynet\daemon_settings.yml
			LBRYDaemonSettingsBackupFP = C:\Users\%A_UserName%\AppData\Local\lbry\lbrynet\daemon_settings_BU.yml


			; Msgbox % "daemon_settingsText: " daemon_settingsText
			FileMove,  %LBRYDaemonSettingsFP%,  %LBRYDaemonSettingsBackupFP%, 1 ; Dest [, Flag (1 = overwrite)]
			
			UrlDownloadToFile, https://freedomain.dev/yuriy/video-uploader/raw/branch/main/Assets/daemon_settings.yml , %LBRYDaemonSettingsFP%

			sleep, 1000

			if(!FileExist(LBRYDaemonSettingsFP)){
				Message = Failed to download the custom daemon_settings.yml file from git. Restoring Original File
				SaveOrPostProgress(Message:=Message,PostType:=",ErrorLoggingTextFile,DiscordErrorLogging")
				FileMove,%LBRYDaemonSettingsBackupFP%,%LBRYDaemonSettingsFP%, 1
			}
		}


		try run, "%LBRYExeFilepath%"
		Message = Waiting 1 Minute for LBRY to start up
		SaveOrPostProgress(Message:=Message,PostType:="Tooltip")
		Sleep, 60000 ; 1 minute

		Process, Exist,LBRY.exe
		if(ErrorLevel = 0) ; if doesn't exist
		{
			Message = Failed to Start LBRY.exe after 60 seconds of waiting
			SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
			Return
		}
		WinMinimize, LBRY
	}
	Return
}


GetPermanentLBRYURL(UploadResult){
	SingleQuotationmark = "

	UploadResult := StrSplit(UploadResult, "`n") ; split results by new line

	; Iterate through the array of the results
	Loop % UploadResult.Length() {
		PermanentURL := UploadResult[A_Index]
		if(InStr(PermanentURL, "permanent_url"))
		Break
	}

	; Starting Result: "permanent_url": "lbry://Test-Video-161-Numbered#c9ad9afe54c7178d6f870b59bbe129aef8efc3ff",
	PermanentURL := StrSplit(PermanentURL, "lbry:")
	PermanentURL := "lbry:" . PermanentURL[2]
	PermanentURL := StrReplace(PermanentURL, ",", "")
	PermanentURL := StrReplace(PermanentURL, SingleQuotationmark, "")
	PermanentURL := StrReplace(PermanentURL, "`n", "")
	PermanentURL := StrReplace(PermanentURL, "`r", "")

	; End Result lbry://Test-Video-161-Numbered#c9ad9afe54c7178d6f870b59bbe129aef8efc3ff
	Return PermanentURL
}


GetLBRYCanonicalURL(LBRYJSONObject){ ; input json string
	; ResolveURL := StrSplit(LBRYResolveAPICommand, "lbry://")
	; ResolveURL := "lbry://" . ResolveURL[2]
	; StrReplace(Haystack, SearchText [, ReplaceText, OutputVarCount, Limit := -1])
	LBRYPermanentURLJsonOBJ := StrReplace(LBRYJSONObject, LBRYPermanentURL, "LBRYPermanentURL")
	; clipboard := LBRYPermanentURLJsonOBJ
	; DevModeMsgBox(LBRYPermanentURLJsonOBJ)

	try parsed := JSON.Load(LBRYPermanentURLJsonOBJ)
	try LBRYCanonicalURL := parsed.LBRYPermanentURL.canonical_url

	; DevModeMsgBox(LBRYCanonicalURL)

	if(LBRYCanonicalURL = ""){
		Return "" ; return blank
	}

	; otherwise return the LBRY url
	LBRYCanonicalURL := StrReplace(LBRYCanonicalURL, "lbry://", "https://lbry.tv/")
	Return LBRYCanonicalURL
}


LBRYCMDTextReplacement(LBRYURLSlug){
	SingleQUote = "
	LBRYURLSlug :=  StrReplace(LBRYURLSlug, " ", "_") ; replace all spaces with dashes 
	LBRYURLSlug :=  StrReplace(LBRYURLSlug, ":", "_") ; replace all colons with dashes 
	LBRYURLSlug :=  StrReplace(LBRYURLSlug, ",", "_") ; replace all colons with dashes 
	LBRYURLSlug :=  StrReplace(LBRYURLSlug, "?", "") ; replace all colons with dashes 
	LBRYURLSlug :=  StrReplace(LBRYURLSlug, "!", "") ; replace all colons with dashes 
	LBRYURLSlug :=  StrReplace(LBRYURLSlug, "`;", "_") ; replace all colons with dashes 
	LBRYURLSlug :=  StrReplace(LBRYURLSlug, "/", "_") ; replace all colons with dashes 
	; LBRYURLSlug :=  StrReplace(LBRYURLSlug, "?", "") ; replace all colons with dashes 
	LBRYURLSlug :=  StrReplace(LBRYURLSlug, "<", "_") ; replace all colons with dashes 
	LBRYURLSlug :=  StrReplace(LBRYURLSlug, ">", "_") ; replace all colons with dashes 
	LBRYURLSlug :=  StrReplace(LBRYURLSlug, SingleQUote, "") ; replace all colons with dashes 
	LBRYURLSlug :=  StrReplace(LBRYURLSlug, "'", "") ; replace all colons with dashes 
	LBRYURLSlug :=  StrReplace(LBRYURLSlug, "=", "") ; replace all colons with dashes 
	LBRYURLSlug :=  StrReplace(LBRYURLSlug, ";", "") ; replace all colons with dashes 
	LBRYURLSlug :=  StrReplace(LBRYURLSlug, ")", "") ; replace all colons with dashes 
	LBRYURLSlug :=  StrReplace(LBRYURLSlug, "(", "") ; replace all colons with dashes 
	LBRYURLSlug :=  StrReplace(LBRYURLSlug, "___", "_") ; replace all colons with dashes 
	LBRYURLSlug :=  StrReplace(LBRYURLSlug, "__", "_") ; replace all colons with dashes 
	LBRYURLSlug :=  StrReplace(LBRYURLSlug, "__", "_") ; replace all colons with dashes 
	Return LBRYURLSlug
}

GetLBRYAPIErrorFromString(UploadResult){
	UploadResultArray := StrSplit(UploadResult, "message")
	LBRYAPIError := UploadResultArray[2]
	; LBRYAPIErrorStrLen := StrLen(LBRYAPIError)

	; LBRYAPIErrorStrToTrim := LBRYAPIErrorStrLen - 3
	; Msgbox % "LBRYAPIErrorStrToTrim: " LBRYAPIErrorStrToTrim
	LBRYAPIError := SubStr(LBRYAPIError, 4)
	LBRYAPIError := StrReplace(LBRYAPIError, "}", "")


	; Msgbox % "LBRYAPIError: " LBRYAPIError
	Return LBRYAPIError

}


LogErrorToTextFile(Error){
/*	if(LogErrorsToTextFile != 1)
	Return
	*/
	ErrorLoggingFile := VideoFolderDir . "\" . "ErrorLogging.txt"
	FormatTime, TodayDate , YYYYMMDDHH24MISS, yyyyMMdd_hhmmss
	text =
	(


		---------------%TodayDate%---------------
		%CurrentSite%: %Error%


		)
	if(LogErrorsToMsgbox)
	Msgbox % "Text: " Text

	FileAppend, %Text%, %ErrorLoggingFile%
	} ; End of Function

/*
*/

AddToTotalVideosUploadedCount(){
	; IniRead, TotalVideosUploaded, %SettingsIniFilepath%, General, TotalVideosUploaded, %A_Space%
	TotalVideosUploaded += 1
	; IniWrite, %TotalVideosUploaded%, %SettingsIniFilepath%, General, TotalVideosUploaded
}



OnMsgBoxPodcastFinish() {
	DetectHiddenWindows, On
	Process, Exist
	If (WinExist("ahk_class #32770 ahk_pid " . ErrorLevel)) {
		WinMove,, 0
	}
}

OnMsgBoxSocialMediaPoster() {
	DetectHiddenWindows, On
	Process, Exist
	If (WinExist("ahk_class #32770 ahk_pid " . ErrorLevel)) {
		ControlSetText Button1, Yes
		ControlSetText Button2, Not Now
	}
}



Check_For_Stuck_Video_Upload(Index_Number, Upload_Status){
	if(A_index = 1){ ; Create a blank array
		ProgressStatusArray := [] 
		Return
	}

	Message = Upload Status: %Upload_Status%
	SaveOrPostProgress(Message:=Message,PostType:="Tooltip")

	; if we reached the last loop number:
	if(A_index = %Number_of_loops_to_Check_Upload_status%){
		Message = Upload Most Likely Failed: Video Hasn't Finished Uploading after 1 hour. 
		SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")  
		SaveDriverURLOFErrorPage()
		Return "Failed"
	}

	; If progress is still the same after a ten minute interval then error out
	if(HasVal(Array_Index_Num_of_Upload_StatusChecks, A_index)){ ; if current index is in Array of index numbers to check status during

		; Send a notification message of upload status
		Message = Upload Status: %Upload_Status%
		SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")

		; if current upload_status is in the array of values that are updated every 10 mins
		if(HasVal(ProgressStatusArray, Upload_Status)){ 
			Message = Upload Failed (E#4508)`nUpload Stuck at same point for 10 minutes. Stuck Status: %ProgressStatus%
			SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")  
			SaveDriverURLOFErrorPage()
			Return "Failed"
		}
		ProgressStatusArray.Push(Upload_Status)	; append current status to array
	}
	} ; end of func


; Find the longest word in a string of words
	FindLongestWordInString(m, calloutNumber, pos, haystack, pattern){
		Global wordLength, longestWord

		len := StrLen(m)

		If ( len > wordLength )
		{
			wordLength  := len
			longestWord := m

			; MsgBox, %m%
		}
	}