// SPDX-FileCopyrightText: 2023 CELESTIFYX Team
// SPDX-License-Identifier: GPL-3.0-or-later

use chromakitx::{
    Color,
    TextStyle,
    AnsiColor,
    AnyColor
};

pub(super) struct AnsiRenderer {
    default_color: Color
}

impl AnsiRenderer {
    pub(super) fn new() -> Self {
        Self {
            default_color: Color::new(AnsiColor::White, false)
        }
    }

    pub(super) fn render_segment(&self, text: &str, color: Option<AnyColor>, bold: bool) -> String {
        let mut prefix: String = String::new();

        if bold {
            (&mut prefix).push_str(&Color::new(TextStyle::Bold, false).to_string());
        }

        if let Some(c) = color {
            (&mut prefix).push_str(&Color::new(c, false).to_string());
        } else {
            (&mut prefix).push_str(&self.default_color.to_string());
        }

        format!("{}{}{}", prefix, text, Color::new(TextStyle::Reset, false))
    }
}

impl Default for AnsiRenderer {
    fn default() -> Self {
        Self::new()
    }
}
