use serde::{Deserialize, Serialize};
use converge_core::{AuthorityLevel, FlowAction, FlowPhase};
use converge_pack::{DomainId, GateId, PolicyVersionId, PrincipalId, ResourceId, ResourceKind};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PrincipalIn {
pub id: PrincipalId,
pub authority: AuthorityLevel,
pub domains: Vec<DomainId>,
pub policy_version: Option<PolicyVersionId>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResourceIn {
pub id: ResourceId,
#[serde(rename = "type")]
pub resource_type: Option<ResourceKind>,
pub phase: Option<FlowPhase>,
pub gates_passed: Option<Vec<GateId>>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ContextIn {
pub commitment_type: Option<String>,
pub amount: Option<i64>,
pub human_approval_present: Option<bool>,
pub required_gates_met: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DecideRequest {
pub principal: PrincipalIn,
pub resource: ResourceIn,
pub action: FlowAction,
pub context: Option<ContextIn>,
pub delegation_b64: Option<String>,
}