Documentation
use std::env;

use pdfrust::Extract;

struct Config {
    path: String,
    flags: Extract,
}

impl Config {
    fn new(args: env::Args) -> Config {
        let args: Vec<String> = args.collect();
        match args.len() {
            2 => Config {
                path: args[1].clone(),
                flags: pdfrust::Extract::Text,
            },
            3 => Config {
                path: args[2].clone(),
                flags: match args[1].as_str() {
                    "--text" => pdfrust::Extract::Text,
                    "--chars" => pdfrust::Extract::Chars,
                    "--font" => pdfrust::Extract::Font,
                    "--raw-content" => pdfrust::Extract::RawContent,
                    f => panic!("Invalid flag: {f}\nPdfRust currently support:\n\t--text\t\tformatted text\n\t--chars\t\ttext character font and positionning\n\t--raw-content\traw pdf content\n\t--font\t\tfont analyzer"),
                },
            },
            _ => panic!("CLI should have 2 or 3 arguments"),
        }
    }
}

fn main() {
    let config = Config::new(env::args());
    let file = std::fs::read(config.path).unwrap();
    let pdf = pdfrust::Pdf::from(file);
    let content = pdf.extract(config.flags);
    println!("{content}");
}