//! AI widget demos

use crate::theme_colors;
use revue::prelude::*;

pub fn render() -> impl View {
    let (primary, success, _warning, _error, info, muted, text, _) = theme_colors();

    vstack()
        .gap(2)
        .child(
            hstack()
                .gap(3)
                .child(
                    Border::rounded().title(" AI Stream ").child(
                        vstack()
                            .gap(1)
                            .child(Text::new("Prompt: Write a Rust function").fg(primary))
                            .child(Text::new(""))
                            .child(Text::new("Response:").fg(text))
                            .child(
                                Text::new("Here's a Rust function to calculate fibonacci:")
                                    .fg(text),
                            )
                            .child(Text::new(""))
                            .child(Text::new("fn fibonacci(n: u64) -> u64 {").fg(info))
                            .child(Text::new("    match n {").fg(info))
                            .child(Text::new("        0 => 0,").fg(info))
                            .child(Text::new("        1 => 1,").fg(info))
                            .child(
                                Text::new("        _ => fibonacci(n-1) + fibonacci(n-2),").fg(info),
                            )
                            .child(Text::new("    }").fg(info))
                            .child(Text::new("}").fg(info))
                            .child(Spinner::new().label("Streaming..."))
                            .child(Text::new(""))
                            .child(Text::new("• Streaming responses").fg(muted))
                            .child(Text::new("• Code generation").fg(muted))
                            .child(Text::new("• Real-time display").fg(muted)),
                    ),
                )
                .child(
                    Border::rounded().title(" AI Response ").child(
                        vstack()
                            .gap(1)
                            .child(Text::new("Model: claude-3-opus").fg(primary))
                            .child(Text::new("Prompt: Explain Rust ownership").fg(text))
                            .child(Text::new(""))
                            .child(Text::new("Response:").fg(text))
                            .child(
                                Text::new("Rust ownership is a memory management feature...")
                                    .fg(text),
                            )
                            .child(Text::new(""))
                            .child(Text::new("Tokens: 150 | Duration: 1200ms").fg(muted))
                            .child(Text::new(""))
                            .child(Text::new("• Complete response").fg(muted))
                            .child(Text::new("• Token count").fg(muted))
                            .child(Text::new("• Duration tracking").fg(muted)),
                    ),
                )
                .child(
                    Border::rounded().title(" Chat Interface ").child(
                        vstack()
                            .gap(1)
                            .child(Text::new("User: What is Revue?").fg(primary))
                            .child(Text::new("Assistant: Revue is a Rust TUI framework").fg(text))
                            .child(Text::new("with 92+ widgets for building beautiful").fg(text))
                            .child(Text::new("terminal interfaces.").fg(text))
                            .child(Text::new(""))
                            .child(Text::new("User: How do I get started?").fg(primary))
                            .child(Text::new("Assistant: Add revue to your Cargo.toml").fg(text))
                            .child(Text::new("and use the prelude:").fg(text))
                            .child(Text::new(""))
                            .child(Text::new("• Conversation view").fg(muted))
                            .child(Text::new("• User/assistant roles").fg(muted))
                            .child(Text::new("• Input field").fg(muted)),
                    ),
                ),
        )
        .child(
            hstack()
                .gap(3)
                .child(
                    Border::rounded().title(" Message Types ").child(
                        vstack()
                            .gap(1)
                            .child(Text::new("Chat message styles:").fg(primary))
                            .child(Text::new(""))
                            .child(Text::new("[SYSTEM] System message").fg(muted))
                            .child(Text::new("[USER] User message").fg(primary))
                            .child(Text::new("[ASSISTANT] Assistant response").fg(success))
                            .child(Text::new(""))
                            .child(Text::new("• System (neutral)").fg(muted))
                            .child(Text::new("• User (highlighted)").fg(muted))
                            .child(Text::new("• Assistant (colored)").fg(muted)),
                    ),
                )
                .child(
                    Border::rounded().title(" Model Selection ").child(
                        vstack()
                            .gap(1)
                            .child(Text::new("AI model picker:").fg(primary))
                            .child(Text::new(""))
                            .child(Text::new("(*) claude-3-opus - Most capable").fg(success))
                            .child(Text::new("( ) claude-3-sonnet - Balanced").fg(text))
                            .child(Text::new("( ) claude-3-haiku - Fast").fg(text))
                            .child(Text::new(""))
                            .child(Text::new("• Model comparison").fg(muted))
                            .child(Text::new("• Capability info").fg(muted))
                            .child(Text::new("• Quick selection").fg(muted)),
                    ),
                )
                .child(
                    Border::rounded().title(" Usage Stats ").child(
                        vstack()
                            .gap(1)
                            .child(Text::new("Token usage:").fg(primary))
                            .child(Text::new(""))
                            .child(Text::new("Input tokens: 256").fg(text))
                            .child(Progress::new(0.33))
                            .child(Text::new("Output tokens: 512").fg(text))
                            .child(Progress::new(0.67))
                            .child(Text::new("Total: 768").fg(text))
                            .child(Progress::new(0.50))
                            .child(Text::new(""))
                            .child(Text::new("Cost: $0.02").fg(success))
                            .child(Text::new(""))
                            .child(Text::new("• Input/output tokens").fg(muted))
                            .child(Text::new("• Cost estimation").fg(muted))
                            .child(Text::new("• Rate limits").fg(muted)),
                    ),
                ),
        )
}
