daat-locus 0.1.0

A long-running local agent runtime with memory, workflows, apps, and sleep-time self-improvement.
use ratatui::{
    style::{Color, Modifier, Style},
    text::{Line, Span},
};
use serde::{Deserialize, Serialize};

use crate::tool_ui::{ActivateWorkflowUiData, CreateWorkflowUiData, DeepRecallUiData, glyph};

use super::primitives::Cell;

#[derive(Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct ActivateWorkflowActivityCell {
    pub workflow_id: String,
}

#[derive(Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct CreateWorkflowActivityCell {
    pub workflow_id: String,
}

#[derive(Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct DeepRecallActivityCell {
    pub memory_count: usize,
}

impl Cell for ActivateWorkflowActivityCell {
    fn render_lines(&self) -> Vec<Line<'static>> {
        vec![Line::from(vec![
            Span::styled(
                glyph::WORKFLOW,
                Style::default()
                    .fg(Color::LightBlue)
                    .add_modifier(Modifier::BOLD),
            ),
            Span::raw("  "),
            Span::styled(
                format!("Activated Workflow: {}", self.workflow_id),
                Style::default()
                    .fg(Color::White)
                    .add_modifier(Modifier::BOLD),
            ),
        ])]
    }
}

impl Cell for CreateWorkflowActivityCell {
    fn render_lines(&self) -> Vec<Line<'static>> {
        vec![Line::from(vec![
            Span::styled(
                glyph::WORKFLOW,
                Style::default()
                    .fg(Color::LightBlue)
                    .add_modifier(Modifier::BOLD),
            ),
            Span::raw("  "),
            Span::styled(
                format!("Created Workflow: {}", self.workflow_id),
                Style::default()
                    .fg(Color::White)
                    .add_modifier(Modifier::BOLD),
            ),
        ])]
    }
}

impl Cell for DeepRecallActivityCell {
    fn render_lines(&self) -> Vec<Line<'static>> {
        vec![Line::from(vec![
            Span::styled(
                glyph::MEMORY,
                Style::default()
                    .fg(Color::LightBlue)
                    .add_modifier(Modifier::BOLD),
            ),
            Span::raw("  "),
            Span::styled(
                format!("Recalled {} Memories", self.memory_count),
                Style::default()
                    .fg(Color::White)
                    .add_modifier(Modifier::BOLD),
            ),
        ])]
    }
}

impl From<ActivateWorkflowUiData> for ActivateWorkflowActivityCell {
    fn from(data: ActivateWorkflowUiData) -> Self {
        ActivateWorkflowActivityCell {
            workflow_id: data.workflow_id,
        }
    }
}

impl From<CreateWorkflowUiData> for CreateWorkflowActivityCell {
    fn from(data: CreateWorkflowUiData) -> Self {
        CreateWorkflowActivityCell {
            workflow_id: data.workflow_id,
        }
    }
}

impl From<DeepRecallUiData> for DeepRecallActivityCell {
    fn from(data: DeepRecallUiData) -> Self {
        DeepRecallActivityCell {
            memory_count: data.memory_count,
        }
    }
}