// API state - Shared application state for Axum handlers

use std::sync::Arc;

use crate::services::{AgentService, ProjectService, ProviderAnalyticsService, TaskService};

/// Application state shared across all API handlers
#[derive(Clone)]
pub struct AppState {
    pub project_service: Arc<ProjectService>,
    pub task_service: Arc<TaskService>,
    pub agent_service: Arc<AgentService>,
    pub provider_analytics_service: Arc<ProviderAnalyticsService>,
    // TODO: Phase 4 - Add workflow_service when workflow module is ready
}

impl AppState {
    /// Create a new AppState instance
    pub fn new(
        project_service: ProjectService,
        task_service: TaskService,
        agent_service: AgentService,
        provider_analytics_service: ProviderAnalyticsService,
    ) -> Self {
        Self {
            project_service: Arc::new(project_service),
            task_service: Arc::new(task_service),
            agent_service: Arc::new(agent_service),
            provider_analytics_service: Arc::new(provider_analytics_service),
        }
    }
}
