DailyMotionUpload:
;------------------------------------------------

CurrentSite := "DailyMotion"
SaveOrPostProgress(Message:="Starting Upload",PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")

IniRead, DailyMotionParnerUploadPage, %SettingsIniFilepath%, General, DailyMotionPostPageURL, %A_Space%
if(DailyMotionParnerUploadPage = ""){
	Message = Please add your DailyMotion Upload URL to settings.ini file under:`n`n[General]`nDailyMotionPostPageURL=https://www.dailymotion.com/partner/[YOURIDNUMBER]/media/video/upload
	SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
	Return
}

Status := NavigateFromBaseURLTo(DailyMotionParnerUploadPage,"Partner HQ - Dailymotion")
if(Status)
Return

Message = Waiting for Page to Finish Fully Loading
SaveOrPostProgress(Message:=Message,PostType:="Tooltip")
try driver.executeScript("return document.readyState").equals("complete") ; wait until page loads completely before proceeding
sleep, 1500

Message = Checking Log In Status
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")

LoggedOutStatus := CheckURLForSubstring("/sign-in")
if(LoggedOutStatus){

	if(AutoLogin){
		Message = Trying to Log Back in Automatically
		SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile")

		; have to click into username and password field for page to register that there's input
		; clicking with JS doesn't make it register, but with xpath selenium it does
		Xpath = //input[@placeholder='Email address']
		try driver.FindElementByXPath(Xpath).click()

		Xpath = //input[@placeholder='Enter password']
		try driver.FindElementByXPath(Xpath).click()

		js = document.querySelector("button[type='submit']").click(); 
		try driver.executeScript(js)

		try driver.executeScript("return document.readyState").equals("complete") ; wait until page loads completely before proceeding
		sleep, 1000

		; Do a double check to make sure that login worked
		Message = Checking Login Status
		SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")

		LoggedOutStatus := CheckURLForSubstring("/sign-in")
		if(LoggedOutStatus){
			Message = Failed to log back in. Please Log Back In Manually
			SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
			SaveDriverURLOFErrorPage()
			Return
		}

	} 
	else, { ; notify user and return
		Message = Login Expired. Please Log Back in
		SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
		SaveDriverURLOFErrorPage()
		Return
	}

	Message = Waiting 5 seconds for page to fully load
	SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile")
	sleep, 5000
}


status := CheckForAlerts()
if(Status){
	Message = Waiting for page to fully load
	try, driver.executeScript("return document.readyState").equals("complete") ; wait until page loads completely before proceeding
	sleep, 2000
}


Message = Uploading Video
SaveOrPostProgress(Message:=Message,PostType:="Tooltip")

Xpath = //input[@type='file']
Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=1,SleepLength:=2000,StringTextContent:=VideoFilepath)
if(Status){

	Message = Failed to Upload Video. Please Check Login Status
	SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
	SaveDriverURLOFErrorPage()
	Return

}
sleep, 2000


Message = Uploading Thumbnail
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")

Xpath = //input[@type='file']
Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=VideoThumbFilepath)
if(Status){
	Message = Failed to Upload Thumbnail: Check Login Status
	SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
}


Message = Inputting Title
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile")

loop, 5 { ; sometimes the pre-inserted title doesn't get cleaned out when inputting title

if(A_index = 5){
	Message = Failed to input title after 5 attempts.
	; SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
	; Return
	SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
	SaveDriverURLOFErrorPage()
	Return
}

Xpath = (//input[@placeholder='Enter text'])[1]
try, driver.FindElementByXPath(Xpath).click()

js = document.querySelector("input[placeholder='Enter text']").value = "%JSVideoTitle%";
try driver.executeScript(js)

Xpath = (//input[@placeholder='Enter text'])[1]
try driver.FindElementByXPath(Xpath).SendKeys(driver.Keys.SPACE)
try driver.FindElementByXPath(Xpath).SendKeys(driver.Keys.BackSpace)

; get text in title box and see if it matches video title
js = return document.querySelector("input[placeholder='Enter text']").value;
try CurrentTitle := driver.executeScript(js)
; Msgbox % "CurrentTitle: " CurrentTitle

if(CurrentTitle != VideoTitle){
	Message = Failed to input title on attempt %A_index%
	SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
	sleep, 1000
}
else,
Break

}




Message = Inputting Video Description
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")


if(strLen(VideoDescription) > 2900){
	DailyMotionDescription := SubStr(VideoDescription, 1, 2900) . "..."
}
else, 
DailyMotionDescription := VideoDescription


DailyMotionJSDescription := FormatTextToJSText(DailyMotionDescription)

Message := "DailyMotionJSDescription String Length: " . StrLen(DailyMotionJSDescription)
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")


Message = Inputting Video Description
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile")
Loop, 5 { ; make a couple attempts to input description
	if(A_index = 5){
		Message = Failed to input Description after %A_index% attempts.
		SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
		SaveDriverURLOFErrorPage()
		Return
	}


	; click into element
	Xpath = //textarea[@placeholder='Enter a description']
	try driver.FindElementByXPath(Xpath).click()

	; send a space and then backspace so element registers the input
	Xpath = //textarea[@placeholder='Enter a description']
	try driver.FindElementByXPath(Xpath).SendKeys(driver.Keys.SPACE)
	try driver.FindElementByXPath(Xpath).SendKeys(driver.Keys.BackSpace)


	; inut description with javascript
	js = document.querySelector("textarea[placeholder='Enter a description']").value = "%JSVideoDescription%";
	try driver.executeScript(js)

	; send a space and then backspace so element registers the input
	Xpath = //textarea[@placeholder='Enter a description']
	try driver.FindElementByXPath(Xpath).SendKeys(driver.Keys.SPACE)
	try driver.FindElementByXPath(Xpath).SendKeys(driver.Keys.BackSpace)

	sleep, 1000

	js = return document.querySelector("textarea[placeholder='Enter a description']").textContent; 
	try, InputDescription := driver.executeScript(js)

	message = InputDescription: %InputDescription%
	DevModeMsgBox(InputDescription)

	; if input description is less than 15 chars, try again
	if(StrLen(InputDescription) < 15)
	Continue
	else, 
	Break

}



; Make a couple attempts to Click on Drop down menu and select the "Education" Category
Message = Selecting Education Category
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")

Loop, 3 {
	if(A_index = 3){
		Message = Failed to Select Education Category after %A_index% attempts
		SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
		SaveDriverURLOFErrorPage()
		Return
	}

	Xpath = //div[@name='channel']
	Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000)

	js = document.querySelector("div[title='Education'] div[class='ant-select-item-option-content']").click()
	try status := driver.executeScript(js)

	js = return document.querySelector("div[name='channel']").textContent; 
	try, status := driver.executeScript(js)

	if(instr(status, "Education"))
	break

}


Message = Inputting Tags
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")

; Append comma to end of tags
; DailyMotion page automtically splits the tags into individual tags when they're seperated by commas

; Iterate from one end of the array to another:
Loop % ArrayOfVideoTags.Length(){
	; ArrayItem := ARRAY[A_Index]
	; MsgBox % 
	DailyMotionVideoTags .= ArrayOfVideoTags[A_Index] . ","
}


; DailyMotionVideoTags := VideoTags . ","

Message = Video Tags: %DailyMotionVideoTags%
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")

Xpath = (//input[@id='tags'])[1]
Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=DailyMotionVideoTags)

; double check the input
js = return document.querySelector("div[name='tags']").textContent; 
try, inputTags := driver.executeScript(js)
Message = Tags that got input: %inputTags% (Will be doubled b/c of js)
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")


Message = Clicking Next Button to Move on to next input screen
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")

Xpath = //button[@type='button']//span[contains(text(),'Next')]
Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000)


Message = Selecting "Not For Kids" checkbox
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")

try driver.findElementsByName("is_created_for_kids").item[2].click()
catch e {
	sleep, 2000
	try driver.findElementsByName("is_created_for_kids").item[2].click()
	catch e {
		Message = Failed to Click on the "Not Made For Kids" checkbox. Please switch to tab and finalize upload.
		SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
		SaveDriverURLOFErrorPage()
		Return
	}
}


; Disable Monetization Checkbox
Message = Disabling Monetization Checkbox
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")

Xpath = //*[@id="advertising_instream_blocked"]
Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000)
if(Status){
	Message = Failed to click on Monetization slider with xpath, trying with full xpath
	SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")

	Xpath = /html/body/div/div[2]/div/div[3]/div/div/div[2]/div[2]/div/div/div/div[4]/div/button
	Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000)
	if(Status){
		Message = Failed to click on Monetization slider with full xpath, sleeping for 5 seconds so user can manually uncheck it.
		SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
	}
}


Message = Clicking Next Button to Move on to third video settings screen
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")

Xpath = //button[@type='button']//span[contains(text(),'Next')]
Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000)


Message = Clicking Save Button to Finalize Upload
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")

Xpath = //span[normalize-space()='Save']
Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000)
if(Status){
	Message = Upload was ALMOST successfuly. Failed to Click Final Save button
	SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
}


; Grab the Share URL and pull out the Video Link from it and save it to the Video links ini file, so double uploads are not tried if fialure occurs
Message = Waiting 30 seconds before grabbing Video URL
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile")

sleep, 30000


Xpath = //ul[@data-test-id='videos-media-list']//li//div//div//div//div//h3//a
try, DailyMotionInternalURL := driver.findelementbyxpath(Xpath).Attribute("href")
if(DailyMotionInternalURL = ""){
	Message = Failed to Grab Video URL. Upload Most likely Failed.
	SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
	SaveDriverURLOFErrorPage()
	Return
}


; Pull out URL slug from internal video URL and create dailymotion share URL from it
DailyMotionURL := StrSplit(DailyMotionInternalURL, "/video/details/")[2] 
DailyMotionURL := "https://www.dailymotion.com/video/" . DailyMotionURL


Message = Upload Complete: %DailyMotionURL%
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
IniWrite, %DailyMotionURL%, %VideoLinksIniFile%, URLs, DailyMotionURL
SaveDriverURL()
AddToTotalVideosUploadedCount()

Return