//! Shared constants and configuration values
//!
//! This module contains constants that are used across multiple
//! services in the Foxhunt HFT trading system.

use std::time::Duration;

/// Maximum query timeout for database operations (milliseconds)
pub const MAX_QUERY_TIMEOUT_MS: u64 = 1000;

/// Default database connection pool size
pub const DEFAULT_POOL_SIZE: u32 = 20;

/// Maximum connection pool size
pub const MAX_POOL_SIZE: u32 = 100;

/// Default health check interval (seconds)
pub const DEFAULT_HEALTH_CHECK_INTERVAL_SECONDS: u64 = 30;

/// Maximum allowed latency for HFT operations (microseconds)
pub const MAX_HFT_LATENCY_MICROS: u64 = 50;

/// Default gRPC port range start
pub const DEFAULT_GRPC_PORT_START: u16 = 50000;

/// Default HTTP port range start
pub const DEFAULT_HTTP_PORT_START: u16 = 8000;

/// Maximum retry attempts for critical operations
pub const MAX_RETRY_ATTEMPTS: u32 = 3;

/// Default timeout for service operations (seconds)
pub const DEFAULT_SERVICE_TIMEOUT_SECONDS: u64 = 30;

/// Configuration refresh interval (seconds)
pub const CONFIG_REFRESH_INTERVAL_SECONDS: u64 = 60;

/// Service defaults configuration
#[derive(Debug)]
pub struct ServiceDefaults;

impl ServiceDefaults {
    /// Default database configuration values
    pub const DATABASE: DatabaseDefaults = DatabaseDefaults;

    /// Default network configuration values
    pub const NETWORK: NetworkDefaults = NetworkDefaults;

    /// Default performance configuration values
    pub const PERFORMANCE: PerformanceDefaults = PerformanceDefaults;
}

/// Database-related default values
#[derive(Debug)]
pub struct DatabaseDefaults;

impl DatabaseDefaults {
    /// Default connection timeout
    pub const CONNECTION_TIMEOUT: Duration = Duration::from_millis(100);

    /// Default query timeout for HFT operations
    pub const QUERY_TIMEOUT: Duration = Duration::from_micros(800);

    /// Default pool acquire timeout
    pub const ACQUIRE_TIMEOUT: Duration = Duration::from_millis(50);

    /// Default connection lifetime
    pub const CONNECTION_LIFETIME: Duration = Duration::from_secs(3600);

    /// Default idle timeout
    pub const IDLE_TIMEOUT: Duration = Duration::from_secs(300);
}

/// Network-related default values
///
/// Default network configuration constants
#[derive(Debug)]
pub struct NetworkDefaults;

impl NetworkDefaults {
    /// Default connect timeout
    pub const CONNECT_TIMEOUT: Duration = Duration::from_millis(5000);

    /// Default request timeout
    pub const REQUEST_TIMEOUT: Duration = Duration::from_millis(10000);

    /// Default keep-alive interval
    pub const KEEP_ALIVE_INTERVAL: Duration = Duration::from_secs(30);

    /// Default maximum concurrent connections
    pub const MAX_CONCURRENT_CONNECTIONS: u32 = 100;
}

/// Performance-related default values
///
/// Default performance configuration constants
#[derive(Debug)]
pub struct PerformanceDefaults;

impl PerformanceDefaults {
    /// Default batch size for processing operations
    pub const BATCH_SIZE: usize = 100;

    /// Default worker thread count (will be adjusted based on CPU cores)
    pub const WORKER_THREADS: usize = 4;

    /// Default queue capacity
    pub const QUEUE_CAPACITY: usize = 10000;

    /// Default metrics collection interval
    pub const METRICS_INTERVAL: Duration = Duration::from_secs(10);
}

/// Service-specific port assignments
pub mod ports {
    /// Trading service gRPC port
    pub const TRADING_SERVICE_GRPC: u16 = 50001;

    /// Trading service HTTP port
    pub const TRADING_SERVICE_HTTP: u16 = 8001;

    /// Backtesting service gRPC port
    pub const BACKTESTING_SERVICE_GRPC: u16 = 50002;

    /// Backtesting service HTTP port
    pub const BACKTESTING_SERVICE_HTTP: u16 = 8002;

    /// ML training service gRPC port
    pub const ML_TRAINING_SERVICE_GRPC: u16 = 50003;

    /// ML training service HTTP port
    pub const ML_TRAINING_SERVICE_HTTP: u16 = 8003;

    /// TLI client port (if needed)
    pub const TLI_CLIENT_PORT: u16 = 8004;
}

/// Environment-specific configuration
pub mod environments {
    /// Development environment constants
    pub mod development {
        /// Default log level for development environment
        pub const LOG_LEVEL: &str = "debug";
        /// Enable detailed logging in development
        pub const ENABLE_DETAILED_LOGGING: bool = true;
        /// Enable performance monitoring in development
        ///
        /// Enable performance monitoring in staging
        ///
        /// Enable performance monitoring in production
        pub const ENABLE_PERFORMANCE_MONITORING: bool = true;
    }

    /// Staging environment constants
    pub mod staging {
        /// Default log level for staging environment
        pub const LOG_LEVEL: &str = "info";
        /// Enable detailed logging in staging (disabled for performance)
        pub const ENABLE_DETAILED_LOGGING: bool = false;
        /// Enable performance monitoring in staging
        pub const ENABLE_PERFORMANCE_MONITORING: bool = true;
    }

    /// Production environment constants
    pub mod production {
        /// Default log level for production environment
        pub const LOG_LEVEL: &str = "warn";
        /// Enable detailed logging in production (disabled for performance)
        pub const ENABLE_DETAILED_LOGGING: bool = false;
        /// Enable performance monitoring in production
        pub const ENABLE_PERFORMANCE_MONITORING: bool = true;
    }
}

// ELIMINATED: Re-exports removed to force explicit imports
