#![warn(
    elided_lifetimes_in_paths,
    explicit_outlives_requirements,
    missing_debug_implementations,
    noop_method_call,
    single_use_lifetimes,
    trivial_casts,
    trivial_numeric_casts,
    unreachable_pub,
    unsafe_code,
    unused_qualifications
)]
#![warn(clippy::pedantic)]

use std::path::PathBuf;

use clap::Parser;
use kdl_schema::Schema;
use kdl_schema_check::CheckExt;
use miette::{IntoDiagnostic, Result};

/// Check if a KDL document matches a KDL schema
#[derive(Parser, Debug)]
#[clap(author, version, about, long_about = None)]
struct Args {
    /// Don't print a confirmation if validation succeeds
    #[clap(short, long)]
    quiet: bool,

    /// Path to schema KDL file
    schema: PathBuf,

    /// Path to document KDL file
    document: PathBuf,
}

fn main() -> Result<()> {
    let args = Args::parse();

    // TODO use kdl_schema file parse API
    let schema_data = std::fs::read_to_string(args.schema).into_diagnostic()?;
    let schema = Schema::parse(&schema_data)?;

    schema.check_file_matches(args.document)?;

    if !args.quiet {
        println!("Validation succeeded!");
    }

    Ok(())
}