use gpui::{Context, FontWeight, IntoElement, Render, Window};
use ui::{prelude::*, tooltip_container};

pub struct BurnModeTooltip {
    selected: bool,
}

impl BurnModeTooltip {
    pub fn new() -> Self {
        Self { selected: false }
    }

    pub fn selected(mut self, selected: bool) -> Self {
        self.selected = selected;
        self
    }
}

impl Render for BurnModeTooltip {
    fn render(&mut self, window: &mut Window, cx: &mut Context<Self>) -> impl IntoElement {
        let (icon, color) = if self.selected {
            (IconName::ZedBurnModeOn, Color::Error)
        } else {
            (IconName::ZedBurnMode, Color::Default)
        };

        let turned_on = h_flex()
            .h_4()
            .px_1()
            .border_1()
            .border_color(cx.theme().colors().border)
            .bg(cx.theme().colors().text_accent.opacity(0.1))
            .rounded_sm()
            .child(
                Label::new("ON")
                    .size(LabelSize::XSmall)
                    .weight(FontWeight::SEMIBOLD)
                    .color(Color::Accent),
            );

        let title = h_flex()
            .gap_1p5()
            .child(Icon::new(icon).size(IconSize::Small).color(color))
            .child(Label::new("Burn Mode"))
            .when(self.selected, |title| title.child(turned_on));

        tooltip_container(window, cx, |this, _, _| {
            this
                .child(title)
                .child(
                    div()
                        .max_w_64()
                        .child(
                            Label::new("Enables models to use large context windows, unlimited tool calls, and other capabilities for expanded reasoning.")
                                .size(LabelSize::Small)
                                .color(Color::Muted)
                        )
                )
        })
    }
}
