use std::path::{Path, PathBuf};

use run_make_support::{assert_dirs_are_equal, rfs, rustdoc};

#[derive(PartialEq)]
enum JsonOutput {
    Yes,
    No,
}

fn generate_docs(out_dir: &Path, json_output: JsonOutput) {
    let mut rustdoc = rustdoc();
    rustdoc.input("src/lib.rs").crate_name("foobar").crate_type("lib").out_dir(&out_dir);
    if json_output == JsonOutput::Yes {
        rustdoc.arg("-Zunstable-options").output_format("json");
    }
    rustdoc.run();
}

fn main() {
    let out_dir = PathBuf::from("rustdoc");
    let tmp_out_dir = PathBuf::from("tmp-rustdoc");

    // Generate HTML docs.
    generate_docs(&out_dir, JsonOutput::No);

    // Copy first output for to check if it's exactly same after second compilation.
    rfs::copy_dir_all(&out_dir, &tmp_out_dir);

    // Generate html docs once again on same output.
    generate_docs(&out_dir, JsonOutput::No);

    // Generate json doc on the same output.
    generate_docs(&out_dir, JsonOutput::Yes);

    // Check if expected json file is generated.
    assert!(out_dir.join("foobar.json").is_file());

    // Copy first json output to check if it's exactly same after second compilation.
    rfs::copy(out_dir.join("foobar.json"), tmp_out_dir.join("foobar.json"));

    // Generate json doc on the same output.
    generate_docs(&out_dir, JsonOutput::Yes);

    // Check if all docs(including both json and html formats) are still the same after multiple
    // compilations.
    assert_dirs_are_equal(&out_dir, &tmp_out_dir);
}
