use std::env;
use std::fs::File;
use std::io::Read;

pub type Result<T> = std::result::Result<T, Box<dyn std::error::Error>>;

pub fn read_file() -> Result<Vec<(usize, usize, char, String)>> {
    let path = env::args().skip(1).next().unwrap();
    let mut file = File::open(path)?;
    let mut content = String::new();
    file.read_to_string(&mut content)?;

    let result = content
        .lines()
        .map(|line| {
            let tokens = line
                .split(&[' ', ':', '-'][..])
                .filter(|&x| x != "")
                .collect::<Vec<_>>();
            (
                tokens[0].parse().unwrap(),
                tokens[1].parse().unwrap(),
                tokens[2].chars().next().unwrap(),
                tokens[3].into(),
            )
        })
        .collect();

    Ok(result)
}