use regex::Regex;
use stringmatch::StringMatch;
use thirtyfour::prelude::*;
use thirtyfour::support::sleep;
use thirtyfour_query::{ElementPoller, ElementQueryable};
use tokio::time::Duration;
#[tokio::main]
async fn main() -> color_eyre::Result<()> {
color_eyre::install()?;
let caps = DesiredCapabilities::chrome();
let mut driver = WebDriver::new("http://localhost:4444", &caps).await?;
driver.set_implicit_wait_timeout(Duration::new(0, 0)).await?;
let poller =
ElementPoller::TimeoutWithInterval(Duration::new(20, 0), Duration::from_millis(500));
driver.config_mut().set("ElementPoller", poller)?;
driver.get("https://youtube.com").await?;
let elem_search = driver.query(By::Css("#search-input #search")).first().await?;
elem_search.send_keys("rick astley never gonna give you up").await?;
elem_search.send_keys(Keys::Enter).await?;
let elem_title = driver
.query(By::Css(
"#page-manager .text-wrapper #title-wrapper #video-title .ytd-video-renderer",
))
.with_text(StringMatch::from("Never Gonna Give You Up").partial())
.first()
.await?;
elem_title.query(By::XPath("./..")).first().await?.click().await?;
let elem_fullscreen_button =
driver.query(By::Css("button.ytp-fullscreen-button")).first().await?;
elem_fullscreen_button.scroll_into_view().await?;
sleep(Duration::new(1, 0)).await;
elem_fullscreen_button.click().await?;
let progress_bar = driver
.query(By::ClassName("ytp-progress-bar"))
.with_attribute("aria-valuemax", Regex::new(r"\d+").unwrap())
.first()
.await?;
let seconds: u64 = progress_bar
.get_attribute("aria-valuemax")
.await?
.map(|x| x.parse().ok())
.flatten()
.unwrap_or(30);
sleep(Duration::new(seconds, 0)).await;
Ok(())
}