#[derive(Debug, PartialEq)]
pub enum ControlSequence {
    SetCharacterAttribute(CharacterAttribute),
    SetCursorPosition(u32, u32),
    EraseInLine(EraseInLine),
    EraseInDisplay(EraseInDisplay),
    EraseCharacters(u32),
    SetCursorStyle(CursorStyle),
    MoveCursorUp(u32),
    MoveCursorDown(u32),
    MoveCursorForward(u32),

    SetAlternateMode(bool),
    SetBracketedPasteMode(bool),
    SetApplicationCursor(bool),
    SetWindowParameter(SetWindowParameter, String),
    SetAlternateKeypad(bool),

    SetScrollingRegion(u32, u32),
    InsertLines(u32),
    DeleteLines(u32),

    QueryKeyModifiers(QueryKeyModifiers),
    Decrqm,
    DeviceStatusReport,
    ReportCursorPosition,
    SendDeviceAttributes(u32),
}

#[derive(Debug, PartialEq)]
pub enum SetWindowParameter {
    Icon,
    Title,
    Both,
}

#[derive(Debug, PartialEq)]
pub enum EraseInLine {
    ToRight,
    ToLeft,
    All,
}

#[derive(Debug, PartialEq)]
pub enum EraseInDisplay {
    Below,
    Above,
    All,
    SavedLines,
}

#[derive(Debug, PartialEq, Clone, Copy)]
pub enum CursorStyle {
    Block(bool),
    Bar(bool),
    Underline(bool),
}

#[derive(Debug, PartialEq)]
pub enum CharacterAttribute {
    Reset,
    Bold,
    Faint,
    Normal,
    Italicized(bool),
    Underlined(bool),
    Blinking(bool),
    Inverse(bool),
    Hidden(bool),
    CrossedOut(bool),
    FgIndex(Option<u8>),
    BgIndex(Option<u8>),
    DefaultFgBg,
    ForegroundRgb(u8, u8, u8),
    BackgroundRgb(u8, u8, u8),
}

#[derive(Debug, PartialEq)]
pub enum QueryKeyModifiers {
    ModifyKeyboard,
    ModifyCursorKeys,
    ModifyFunctionKeys,
    ModifyKeypadKeys,
    ModifyOtherKeys,
    ModifyModifierKeys,
    ModifySpecialKeys,
}
