use std::fmt;

sequence!(
    /// Resets all attributes.
    ///
    /// This sequence resets all attributes previously set by the:
    ///
    /// * [`SetAttribute`](struct.SetAttribute.html)
    /// * [`SetForegroundColor`](struct.SetBackgroundColor.html)
    /// * [`SetBackgroundColor`](struct.SetForegroundColor.html)
    ///
    /// # Examples
    ///
    /// ```no_run
    /// use std::io::{stdout, Write};
    /// use anes::ResetAttributes;
    ///
    /// let mut stdout = stdout();
    /// write!(stdout, "{}", ResetAttributes);
    /// ```
    struct ResetAttributes => sgr!("0")
);

/// A display attribute.
///
/// This is **NOT** a full ANSI sequence. `Attribute` must be used along with
/// the [`SetAttribute`](struct.SetAttribute.html).
///
/// # Examples
///
/// ```no_run
/// use std::io::{stdout, Write};
/// use anes::{Attribute, SetAttribute};
///
/// let mut stdout = stdout();
/// write!(stdout, "{}Bold text", SetAttribute(Attribute::Bold));
/// ```
#[derive(Copy, Clone, Debug, Hash, Eq, PartialEq)]
pub enum Attribute {
    /// Bold (increased) intensity.
    Bold = 1,
    /// Faint (decreased) intensity.
    Faint = 2,
    /// Normal intensity (turns off `Bold` and/or `Faint`).
    Normal = 22,

    /// Italic.
    Italic = 3,
    /// Turns off `Italic`.
    ItalicOff = 23,

    /// Underlined text.
    Underline = 4,
    /// Turns off `Underline`.
    UnderlineOff = 24,

    /// Blinking text.
    Blink = 5,
    /// Turns off blinking text (`Blink`).
    BlinkOff = 25,

    /// Reverse foreground & background colors.
    Reverse = 7,
    /// Turns off `Reverse`.
    ReverseOff = 27,

    /// Concealed (hidden).
    Conceal = 8,
    /// Turns off `Conceal`.
    ConcealOff = 28,

    /// Crossed.
    Crossed = 9,
    /// Turns off `Crossed`.
    CrossedOff = 29,
}

impl fmt::Display for Attribute {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        write!(f, "{}", *self as i32)
    }
}

sequence!(
    /// Sets the display attribute.
    ///
    /// See the [`Attribute`](enum.Attribute.html) enum for a list of attributes you can (un)set.
    ///
    /// The [`ResetAttributes`](struct.ResetAttributes.html) sequence can be used to turn off all
    /// attributes.
    ///
    /// # Examples
    ///
    /// ```no_run
    /// use std::io::{stdout, Write};
    /// use anes::{Attribute, SetAttribute};
    ///
    /// let mut stdout = stdout();
    /// write!(stdout, "{}Blinking text", SetAttribute(Attribute::Blink));
    /// ```
    struct SetAttribute(Attribute) =>
    |this, f| write!(f, sgr!("{}"), this.0)
);

#[cfg(test)]
test_sequences!(
    set_attribute(
        SetAttribute(Attribute::Bold) => "\x1B[1m",
        SetAttribute(Attribute::Faint) => "\x1B[2m",
        SetAttribute(Attribute::Normal) => "\x1B[22m",

        SetAttribute(Attribute::Italic) => "\x1B[3m",
        SetAttribute(Attribute::ItalicOff) => "\x1B[23m",

        SetAttribute(Attribute::Underline) => "\x1B[4m",
        SetAttribute(Attribute::UnderlineOff) => "\x1B[24m",

        SetAttribute(Attribute::Blink) => "\x1B[5m",
        SetAttribute(Attribute::BlinkOff) => "\x1B[25m",

        SetAttribute(Attribute::Reverse) => "\x1B[7m",
        SetAttribute(Attribute::ReverseOff) => "\x1B[27m",

        SetAttribute(Attribute::Conceal) => "\x1B[8m",
        SetAttribute(Attribute::ConcealOff) => "\x1B[28m",

        SetAttribute(Attribute::Crossed) => "\x1B[9m",
        SetAttribute(Attribute::CrossedOff) => "\x1B[29m",
    ),
    reset_attributes(
        ResetAttributes => "\x1B[0m",
    )
);
