use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use systemprompt_identifiers::{BrainProposalId, UserId};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum ProposalKind {
ConfigDiff,
FactActions,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum ProposalStatus {
Open,
Approved,
Rejected,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ProposalDraft {
pub analysis: String,
pub kind: ProposalKind,
pub summary: String,
pub body: serde_json::Value,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct BrainProposal {
pub id: BrainProposalId,
pub analysis: String,
pub kind: ProposalKind,
pub status: ProposalStatus,
pub summary: String,
pub body: serde_json::Value,
pub created_at: DateTime<Utc>,
pub decided_by: Option<UserId>,
pub decided_at: Option<DateTime<Utc>>,
}