use anyhow::Result;
use serde_json::Value as JsonValue;
use std::future::Future;
use std::pin::Pin;
use std::sync::Arc;
use crate::llm::OllamaClient;
use crate::protocol::Event;
use crate::state::AppState;
pub trait Easy: Send + Sync {
fn protocol_name(&self) -> &'static str;
fn underlying_protocol(&self) -> &'static str;
fn default_port(&self) -> Option<u16>;
fn generate_startup_action(
&self,
user_instruction: Option<String>,
port: Option<u16>,
) -> Result<JsonValue>;
fn handle_event(
&self,
event: Event,
user_instruction: Option<String>,
llm_client: Arc<OllamaClient>,
app_state: Arc<AppState>,
) -> Pin<Box<dyn Future<Output = Result<Vec<JsonValue>>> + Send>>;
fn get_handled_event_type_ids(&self) -> Vec<&'static str>;
fn description(&self) -> &'static str;
}