use lazy_static::lazy_static;
use std::env;
use yansi::{Color, Style};

lazy_static! {
  static ref NO_COLOR: bool = env::var("NO_COLOR").is_ok();
}

pub fn paint(c: Color, t: &str) -> String {
  if *NO_COLOR {
    t.to_string()
  } else {
    format!("{}", c.paint(t))
  }
}

pub fn style(s: &Style, t: &str) -> String {
  if *NO_COLOR {
    t.to_string()
  } else {
    format!("{}", s.paint(t))
  }
}

pub fn stylew<W: std::fmt::Write>(mut target: W, s: &Style, t: &str) {
  if *NO_COLOR {
    _ = target.write_str(t);
  } else {
    _ = write!(target, "{}", s.paint(t));
  }
}

#[cfg(test)]
pub fn without_style(styled: &str) -> String {
  use regex::Regex;

  let regex = Regex::new("\u{001B}\\[[\\d;]*[^\\d;]").expect("Regex should be valid");
  regex.replace_all(&styled, "").into_owned()
}