use std::io::{self, Write};
use std::time::{Instant, Duration};


/// RAII timer to measure how long phases take.
#[derive(Debug)]
pub struct Timer<'a> {
    output: bool,
    name: &'a str,
    start: Instant,
}


impl<'a> Timer<'a> {
    /// Creates a Timer with the given name, and starts it. By default,
    /// will print to stderr when it is `drop`'d
    pub fn new(name: &'a str) -> Self {
        Timer {
            output: true,
            name,
            start: Instant::now()
        }
    }

    /// Sets whether or not the Timer will print a mesage
    /// when it is dropped.
    pub fn with_output(mut self, output: bool) -> Self {
        self.output = output;
        self
    }

    /// Returns the time elapsed since the timer's creation
    pub fn elapsed(&self) -> Duration {
        Instant::now() - self.start
    }

    fn print_elapsed(&mut self) {
        if self.output {
            let elapsed = self.elapsed();
            let time = (elapsed.as_secs() as f64) * 1e3
                       + (elapsed.subsec_nanos() as f64) / 1e6;
            let stderr = io::stderr();
            // Arbitrary output format, subject to change.
            writeln!(stderr.lock(),
                     "  time: {:>9.3} ms.\t{}",
                     time, self.name)
                     .expect("timer write should not fail");
        }
    }
}


impl<'a> Drop for Timer<'a> {
    fn drop(&mut self) {
        self.print_elapsed();
    }
}
