//! Contract type template definitions.
//!
//! Defines the available contract types and their workflow phases.

use serde::{Deserialize, Serialize};
use utoipa::ToSchema;

// =============================================================================
// Contract Type Templates (Workflow Definitions)
// =============================================================================

/// A contract type template defining a workflow
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "camelCase")]
pub struct ContractTypeTemplate {
    /// Unique identifier (e.g., 'simple', 'specification', 'feature-development')
    pub id: String,
    /// Display name
    pub name: String,
    /// What this contract type is for
    pub description: String,
    /// Ordered list of phases in the workflow
    pub phases: Vec<String>,
    /// Starting phase
    pub default_phase: String,
    /// True for built-in types ('simple', 'specification')
    pub is_builtin: bool,
}

/// Get all available contract type templates
pub fn all_contract_types() -> Vec<ContractTypeTemplate> {
    vec![
        simple_contract_type(),
        specification_contract_type(),
        execute_contract_type(),
    ]
}

/// Simple contract type with basic plan/execute workflow
fn simple_contract_type() -> ContractTypeTemplate {
    ContractTypeTemplate {
        id: "simple".to_string(),
        name: "Simple".to_string(),
        description: "A basic workflow for straightforward tasks with planning and execution phases."
            .to_string(),
        phases: vec!["plan".to_string(), "execute".to_string()],
        default_phase: "plan".to_string(),
        is_builtin: true,
    }
}

/// Specification contract type with full research-to-review workflow
fn specification_contract_type() -> ContractTypeTemplate {
    ContractTypeTemplate {
        id: "specification".to_string(),
        name: "Specification".to_string(),
        description: "A comprehensive workflow for complex projects requiring research, specification, planning, execution, and review.".to_string(),
        phases: vec![
            "research".to_string(),
            "specify".to_string(),
            "plan".to_string(),
            "execute".to_string(),
            "review".to_string(),
        ],
        default_phase: "research".to_string(),
        is_builtin: true,
    }
}

/// Execute-only contract type for immediate task execution
fn execute_contract_type() -> ContractTypeTemplate {
    ContractTypeTemplate {
        id: "execute".to_string(),
        name: "Execute".to_string(),
        description: "A minimal workflow with only an execute phase for immediate task execution without planning documents.".to_string(),
        phases: vec!["execute".to_string()],
        default_phase: "execute".to_string(),
        is_builtin: true,
    }
}
