use serde::{Deserialize, Serialize};

use crate::MessageId;

#[derive(Serialize, Deserialize)]
pub struct SavedConversation {
    /// The schema version of the conversation.
    pub version: String,
    /// The title of the conversation, generated by the Assistant.
    pub title: String,
    pub messages: Vec<SavedMessage>,
}

#[derive(Serialize, Deserialize)]
#[serde(tag = "type", rename_all = "snake_case")]
pub enum SavedMessageRole {
    User,
    Assistant,
}

#[derive(Serialize, Deserialize)]
pub struct SavedMessage {
    pub id: MessageId,
    pub role: SavedMessageRole,
    pub text: String,
}

/// Returns a list of placeholder conversations for mocking the UI.
///
/// Once we have real saved conversations to pull from we can use those instead.
pub fn placeholder_conversations() -> Vec<SavedConversation> {
    vec![
        SavedConversation {
            version: "0.3.0".to_string(),
            title: "How to get a list of exported functions in an Erlang module".to_string(),
            messages: vec![],
        },
        SavedConversation {
            version: "0.3.0".to_string(),
            title: "7 wonders of the ancient world".to_string(),
            messages: vec![],
        },
        SavedConversation {
            version: "0.3.0".to_string(),
            title: "Size difference between u8 and a reference to u8 in Rust".to_string(),
            messages: vec![],
        },
    ]
}
