#![deny(warnings)]

use clap::Parser;

mod clean_url;
use crate::clean_url::clean_url;

#[derive(Parser)]
#[command(version, about = "Clean tracking and unwanted parameters from URLs.", long_about = None)]
struct Cli {
    /// URL to clean
    #[arg()]
    url: String,
}

fn main() {
    let cli = Cli::parse();

    print!("{}", clean_url(&cli.url));
}

#[cfg(test)]
mod test_cli {
    use anyhow::Result;
    use assert_cmd::Command;
    use predicates::prelude::*;

    #[test]
    fn it_prints_the_version() -> Result<()> {
        // Match strings like `clean-url 1.2.3`
        let is_version_string = predicate::str::is_match(r"^clean-url [0-9]+\.[0-9]+\.[0-9]+\n$")?;

        Command::cargo_bin("clean-url")?
            .arg("--version")
            .assert()
            .success()
            .stdout(is_version_string)
            .stderr("");

        Ok(())
    }

    #[test]
    fn it_runs_the_readme_example() -> Result<()> {
        Command::cargo_bin("clean-url")?
            .arg("https://www.etsy.com/uk/listing/689034321/pride-flag-planets-complete-set-cross?ls=s&ga_order=most_relevant&ga_search_type=all&ga_view_type=gallery&ga_search_query=mathysphere+pride+planets&ref=sr_gallery-1-3&dd=1&content_source=750fbda2-0f23-409a-b29d-9714dc4e0ba3%253ALTcadfd6ad1b51d9f2c43bf9fc61aa37ee3ee5cc68&organic_search_click=1&logging_key=750fbda2-0f23-409a-b29d-9714dc4e0ba3%3ALTcadfd6ad1b51d9f2c43bf9fc61aa37ee3ee5cc68")
            .assert()
            .success()
            .stdout("https://www.etsy.com/uk/listing/689034321/pride-flag-planets-complete-set-cross")
            .stderr("");

        Ok(())
    }
}
