-- Initial Configuration Data for Foxhunt HFT Trading System
-- =========================================================
-- This migration populates the configuration system with default values
-- for all services and environments.

-- === CONFIGURATION ENVIRONMENTS ===

INSERT INTO config_environments (environment_name, display_name, description, is_active, is_production, inherits_from, isolation_level, auto_sync) VALUES
('development', 'Development', 'Local development environment with relaxed security and verbose logging', true, false, NULL, 'permissive', false),
('test', 'Testing', 'Automated testing environment with isolated data and mock services', true, false, 'development', 'strict', false),
('staging', 'Staging', 'Pre-production environment mirroring production configuration', true, false, 'development', 'strict', true),
('production', 'Production', 'Live trading environment with strict security and performance optimization', true, true, NULL, 'strict', false);

-- === CONFIGURATION CATEGORIES ===

-- Root categories
INSERT INTO config_categories (category_name, parent_id, category_path, description, is_system, display_order) VALUES
('system', NULL, 'system', 'Core system configuration', true, 1),
('database', NULL, 'database', 'Database connection and performance settings', true, 2),
('security', NULL, 'security', 'Authentication, authorization, and encryption settings', true, 3),
('trading', NULL, 'trading', 'Trading engine and order management configuration', false, 4),
('risk', NULL, 'risk', 'Risk management and compliance settings', false, 5),
('ml', NULL, 'ml', 'Machine learning model and inference configuration', false, 6),
('monitoring', NULL, 'monitoring', 'Logging, metrics, and alerting configuration', true, 7),
('performance', NULL, 'performance', 'Performance tuning and optimization settings', true, 8);

-- System subcategories
INSERT INTO config_categories (category_name, parent_id, category_path, description, is_system, display_order) 
SELECT 'logging', id, 'system.logging', 'Logging configuration and levels', true, 1
FROM config_categories WHERE category_path = 'system';

INSERT INTO config_categories (category_name, parent_id, category_path, description, is_system, display_order)
SELECT 'service_discovery', id, 'system.service_discovery', 'Service discovery and health check settings', true, 2
FROM config_categories WHERE category_path = 'system';

-- Database subcategories
INSERT INTO config_categories (category_name, parent_id, category_path, description, is_system, display_order)
SELECT 'postgresql', id, 'database.postgresql', 'PostgreSQL connection and pool settings', true, 1
FROM config_categories WHERE category_path = 'database';

INSERT INTO config_categories (category_name, parent_id, category_path, description, is_system, display_order)
SELECT 'redis', id, 'database.redis', 'Redis cache and session storage settings', true, 2
FROM config_categories WHERE category_path = 'database';

INSERT INTO config_categories (category_name, parent_id, category_path, description, is_system, display_order)
SELECT 'influxdb', id, 'database.influxdb', 'InfluxDB time-series database settings', true, 3
FROM config_categories WHERE category_path = 'database';

-- Security subcategories
INSERT INTO config_categories (category_name, parent_id, category_path, description, is_system, display_order)
SELECT 'jwt', id, 'security.jwt', 'JWT token configuration and validation', true, 1
FROM config_categories WHERE category_path = 'security';

INSERT INTO config_categories (category_name, parent_id, category_path, description, is_system, display_order)
SELECT 'tls', id, 'security.tls', 'TLS/SSL certificate and encryption settings', true, 2
FROM config_categories WHERE category_path = 'security';

INSERT INTO config_categories (category_name, parent_id, category_path, description, is_system, display_order)
SELECT 'rate_limiting', id, 'security.rate_limiting', 'API rate limiting and DDoS protection', true, 3
FROM config_categories WHERE category_path = 'security';

-- Trading subcategories
INSERT INTO config_categories (category_name, parent_id, category_path, description, is_system, display_order)
SELECT 'order_management', id, 'trading.order_management', 'Order processing and execution settings', false, 1
FROM config_categories WHERE category_path = 'trading';

INSERT INTO config_categories (category_name, parent_id, category_path, description, is_system, display_order)
SELECT 'market_data', id, 'trading.market_data', 'Market data feed and processing configuration', false, 2
FROM config_categories WHERE category_path = 'trading';

INSERT INTO config_categories (category_name, parent_id, category_path, description, is_system, display_order)
SELECT 'brokers', id, 'trading.brokers', 'Broker connection and integration settings', false, 3
FROM config_categories WHERE category_path = 'trading';

-- Risk subcategories
INSERT INTO config_categories (category_name, parent_id, category_path, description, is_system, display_order)
SELECT 'limits', id, 'risk.limits', 'Risk limits and thresholds', false, 1
FROM config_categories WHERE category_path = 'risk';

INSERT INTO config_categories (category_name, parent_id, category_path, description, is_system, display_order)
SELECT 'var_calculation', id, 'risk.var_calculation', 'Value at Risk calculation parameters', false, 2
FROM config_categories WHERE category_path = 'risk';

INSERT INTO config_categories (category_name, parent_id, category_path, description, is_system, display_order)
SELECT 'circuit_breakers', id, 'risk.circuit_breakers', 'Automatic trading halt and circuit breaker settings', false, 3
FROM config_categories WHERE category_path = 'risk';

-- ML subcategories
INSERT INTO config_categories (category_name, parent_id, category_path, description, is_system, display_order)
SELECT 'models', id, 'ml.models', 'Machine learning model configuration and paths', false, 1
FROM config_categories WHERE category_path = 'ml';

INSERT INTO config_categories (category_name, parent_id, category_path, description, is_system, display_order)
SELECT 'inference', id, 'ml.inference', 'Model inference and prediction settings', false, 2
FROM config_categories WHERE category_path = 'ml';

INSERT INTO config_categories (category_name, parent_id, category_path, description, is_system, display_order)
SELECT 'training', id, 'ml.training', 'Model training and optimization parameters', false, 3
FROM config_categories WHERE category_path = 'ml';

-- === CORE SYSTEM CONFIGURATION ===

-- System Logging Configuration
INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'log_level', id, 'system.logging', '"info"'::jsonb, 'string', 'development', 'Default logging level for all services', ARRAY['logging', 'debugging'], true, false
FROM config_categories WHERE category_path = 'system.logging';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'log_level', id, 'system.logging', '"warn"'::jsonb, 'string', 'production', 'Production logging level - warnings and errors only', ARRAY['logging', 'production'], true, false
FROM config_categories WHERE category_path = 'system.logging';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'log_format', id, 'system.logging', '"json"'::jsonb, 'string', 'production', 'Structured JSON logging for production', ARRAY['logging', 'format'], true, false
FROM config_categories WHERE category_path = 'system.logging';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'log_format', id, 'system.logging', '"pretty"'::jsonb, 'string', 'development', 'Human-readable logging for development', ARRAY['logging', 'format'], true, false
FROM config_categories WHERE category_path = 'system.logging';

-- Service Discovery Configuration
INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'health_check_interval_ms', id, 'system.service_discovery', '30000'::jsonb, 'number', 'development', 'Health check interval in milliseconds', ARRAY['health', 'monitoring'], true, false
FROM config_categories WHERE category_path = 'system.service_discovery';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'health_check_timeout_ms', id, 'system.service_discovery', '5000'::jsonb, 'number', 'development', 'Health check timeout in milliseconds', ARRAY['health', 'monitoring'], true, false
FROM config_categories WHERE category_path = 'system.service_discovery';

-- === DATABASE CONFIGURATION ===

-- PostgreSQL Configuration
INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'postgres_max_connections', id, 'database.postgresql', '10'::jsonb, 'number', 'development', 'Maximum database connections per service', ARRAY['database', 'performance'], false, true
FROM config_categories WHERE category_path = 'database.postgresql';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'postgres_max_connections', id, 'database.postgresql', '50'::jsonb, 'number', 'production', 'Production database connection pool size', ARRAY['database', 'performance'], false, true
FROM config_categories WHERE category_path = 'database.postgresql';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'connection_timeout_ms', id, 'database.postgresql', '30000'::jsonb, 'number', 'development', 'Database connection timeout in milliseconds', ARRAY['database', 'timeout'], false, true
FROM config_categories WHERE category_path = 'database.postgresql';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'statement_timeout_ms', id, 'database.postgresql', '60000'::jsonb, 'number', 'development', 'SQL statement execution timeout', ARRAY['database', 'timeout'], true, false
FROM config_categories WHERE category_path = 'database.postgresql';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'statement_timeout_ms', id, 'database.postgresql', '30000'::jsonb, 'number', 'production', 'Production SQL statement timeout - shorter for performance', ARRAY['database', 'timeout'], true, false
FROM config_categories WHERE category_path = 'database.postgresql';

-- Redis Configuration
INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'default_ttl_seconds', id, 'database.redis', '3600'::jsonb, 'number', 'development', 'Default TTL for Redis cache entries', ARRAY['cache', 'ttl'], true, false
FROM config_categories WHERE category_path = 'database.redis';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'redis_max_connections', id, 'database.redis', '20'::jsonb, 'number', 'development', 'Maximum Redis connections per service', ARRAY['cache', 'performance'], false, true
FROM config_categories WHERE category_path = 'database.redis';

-- === SECURITY CONFIGURATION ===

-- JWT Configuration
INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, is_sensitive, hot_reload, restart_required)
SELECT 'token_expiry_minutes', id, 'security.jwt', '60'::jsonb, 'number', 'development', 'JWT token expiration time in minutes', ARRAY['security', 'jwt'], false, true, false
FROM config_categories WHERE category_path = 'security.jwt';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, is_sensitive, hot_reload, restart_required)
SELECT 'token_expiry_minutes', id, 'security.jwt', '15'::jsonb, 'number', 'production', 'Shorter JWT expiration for production security', ARRAY['security', 'jwt'], false, true, false
FROM config_categories WHERE category_path = 'security.jwt';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, is_sensitive, hot_reload, restart_required)
SELECT 'refresh_token_expiry_days', id, 'security.jwt', '7'::jsonb, 'number', 'development', 'Refresh token expiration time in days', ARRAY['security', 'jwt'], false, true, false
FROM config_categories WHERE category_path = 'security.jwt';

-- TLS Configuration
INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'min_tls_version', id, 'security.tls', '"1.2"'::jsonb, 'string', 'production', 'Minimum TLS version required', ARRAY['security', 'tls'], false, true
FROM config_categories WHERE category_path = 'security.tls';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'require_client_certs', id, 'security.tls', 'true'::jsonb, 'boolean', 'production', 'Require mutual TLS authentication', ARRAY['security', 'tls', 'mtls'], false, true
FROM config_categories WHERE category_path = 'security.tls';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'require_client_certs', id, 'security.tls', 'false'::jsonb, 'boolean', 'development', 'Relaxed TLS for development', ARRAY['security', 'tls'], false, true
FROM config_categories WHERE category_path = 'security.tls';

-- Rate Limiting Configuration
INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'api_requests_per_minute', id, 'security.rate_limiting', '1000'::jsonb, 'number', 'development', 'API rate limit per minute per client', ARRAY['security', 'rate_limiting'], true, false
FROM config_categories WHERE category_path = 'security.rate_limiting';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'api_requests_per_minute', id, 'security.rate_limiting', '500'::jsonb, 'number', 'production', 'Production API rate limit', ARRAY['security', 'rate_limiting'], true, false
FROM config_categories WHERE category_path = 'security.rate_limiting';

-- === TRADING CONFIGURATION ===

-- Order Management Configuration
INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'max_order_size_usd', id, 'trading.order_management', '100000'::jsonb, 'number', 'development', 'Maximum single order size in USD', ARRAY['trading', 'limits'], true, false
FROM config_categories WHERE category_path = 'trading.order_management';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'max_order_size_usd', id, 'trading.order_management', '1000000'::jsonb, 'number', 'production', 'Production maximum order size', ARRAY['trading', 'limits'], true, false
FROM config_categories WHERE category_path = 'trading.order_management';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'order_timeout_seconds', id, 'trading.order_management', '30'::jsonb, 'number', 'development', 'Order execution timeout in seconds', ARRAY['trading', 'timeout'], true, false
FROM config_categories WHERE category_path = 'trading.order_management';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'enable_paper_trading', id, 'trading.order_management', 'true'::jsonb, 'boolean', 'development', 'Enable paper trading mode for testing', ARRAY['trading', 'simulation'], true, false
FROM config_categories WHERE category_path = 'trading.order_management';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'enable_paper_trading', id, 'trading.order_management', 'false'::jsonb, 'boolean', 'production', 'Disable paper trading in production', ARRAY['trading', 'simulation'], true, false
FROM config_categories WHERE category_path = 'trading.order_management';

-- Market Data Configuration
INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'market_data_feed_timeout_ms', id, 'trading.market_data', '5000'::jsonb, 'number', 'development', 'Market data feed timeout in milliseconds', ARRAY['trading', 'market_data'], true, false
FROM config_categories WHERE category_path = 'trading.market_data';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'market_data_buffer_size', id, 'trading.market_data', '10000'::jsonb, 'number', 'development', 'Market data buffer size for processing', ARRAY['trading', 'market_data', 'performance'], false, true
FROM config_categories WHERE category_path = 'trading.market_data';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'market_data_buffer_size', id, 'trading.market_data', '50000'::jsonb, 'number', 'production', 'Larger buffer for production throughput', ARRAY['trading', 'market_data', 'performance'], false, true
FROM config_categories WHERE category_path = 'trading.market_data';

-- Broker Configuration
INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'default_broker', id, 'trading.brokers', '"simulation"'::jsonb, 'string', 'development', 'Default broker for development', ARRAY['trading', 'brokers'], true, false
FROM config_categories WHERE category_path = 'trading.brokers';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'connection_retry_attempts', id, 'trading.brokers', '3'::jsonb, 'number', 'development', 'Broker connection retry attempts', ARRAY['trading', 'brokers', 'reliability'], true, false
FROM config_categories WHERE category_path = 'trading.brokers';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'connection_retry_delay_ms', id, 'trading.brokers', '1000'::jsonb, 'number', 'development', 'Delay between connection retry attempts', ARRAY['trading', 'brokers', 'reliability'], true, false
FROM config_categories WHERE category_path = 'trading.brokers';

-- === RISK MANAGEMENT CONFIGURATION ===

-- Risk Limits Configuration
INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'max_daily_loss_usd', id, 'risk.limits', '10000'::jsonb, 'number', 'development', 'Maximum daily loss limit in USD', ARRAY['risk', 'limits'], true, false
FROM config_categories WHERE category_path = 'risk.limits';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'max_daily_loss_usd', id, 'risk.limits', '50000'::jsonb, 'number', 'production', 'Production daily loss limit', ARRAY['risk', 'limits'], true, false
FROM config_categories WHERE category_path = 'risk.limits';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'max_position_concentration_pct', id, 'risk.limits', '20'::jsonb, 'number', 'development', 'Maximum position concentration as percentage of portfolio', ARRAY['risk', 'limits', 'concentration'], true, false
FROM config_categories WHERE category_path = 'risk.limits';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'max_leverage_ratio', id, 'risk.limits', '2.0'::jsonb, 'number', 'development', 'Maximum leverage ratio allowed', ARRAY['risk', 'limits', 'leverage'], true, false
FROM config_categories WHERE category_path = 'risk.limits';

-- VaR Calculation Configuration
INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'var_confidence_level', id, 'risk.var_calculation', '0.95'::jsonb, 'number', 'development', 'VaR confidence level (95%)', ARRAY['risk', 'var'], true, false
FROM config_categories WHERE category_path = 'risk.var_calculation';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'var_time_horizon_days', id, 'risk.var_calculation', '1'::jsonb, 'number', 'development', 'VaR time horizon in days', ARRAY['risk', 'var'], true, false
FROM config_categories WHERE category_path = 'risk.var_calculation';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'var_historical_window_days', id, 'risk.var_calculation', '252'::jsonb, 'number', 'development', 'Historical data window for VaR calculation (trading days)', ARRAY['risk', 'var'], true, false
FROM config_categories WHERE category_path = 'risk.var_calculation';

-- Circuit Breaker Configuration
INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'enable_circuit_breakers', id, 'risk.circuit_breakers', 'true'::jsonb, 'boolean', 'development', 'Enable automatic circuit breakers', ARRAY['risk', 'circuit_breakers'], true, false
FROM config_categories WHERE category_path = 'risk.circuit_breakers';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'circuit_breaker_loss_threshold_pct', id, 'risk.circuit_breakers', '5.0'::jsonb, 'number', 'development', 'Loss threshold to trigger circuit breaker (percentage)', ARRAY['risk', 'circuit_breakers'], true, false
FROM config_categories WHERE category_path = 'risk.circuit_breakers';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'circuit_breaker_cooldown_minutes', id, 'risk.circuit_breakers', '30'::jsonb, 'number', 'development', 'Circuit breaker cooldown period in minutes', ARRAY['risk', 'circuit_breakers'], true, false
FROM config_categories WHERE category_path = 'risk.circuit_breakers';

-- === MACHINE LEARNING CONFIGURATION ===

-- Model Configuration
INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'default_model_type', id, 'ml.models', '"tlob_transformer"'::jsonb, 'string', 'development', 'Default ML model for predictions', ARRAY['ml', 'models'], true, false
FROM config_categories WHERE category_path = 'ml.models';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'model_cache_size', id, 'ml.models', '5'::jsonb, 'number', 'development', 'Number of models to keep in memory cache', ARRAY['ml', 'models', 'performance'], false, true
FROM config_categories WHERE category_path = 'ml.models';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'enable_gpu_acceleration', id, 'ml.models', 'true'::jsonb, 'boolean', 'development', 'Enable GPU acceleration for ML inference', ARRAY['ml', 'gpu', 'performance'], false, true
FROM config_categories WHERE category_path = 'ml.models';

-- Inference Configuration
INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'inference_timeout_ms', id, 'ml.inference', '100'::jsonb, 'number', 'development', 'ML inference timeout in milliseconds', ARRAY['ml', 'inference', 'timeout'], true, false
FROM config_categories WHERE category_path = 'ml.inference';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'inference_timeout_ms', id, 'ml.inference', '50'::jsonb, 'number', 'production', 'Shorter inference timeout for production latency', ARRAY['ml', 'inference', 'timeout'], true, false
FROM config_categories WHERE category_path = 'ml.inference';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'batch_size', id, 'ml.inference', '32'::jsonb, 'number', 'development', 'Batch size for ML inference', ARRAY['ml', 'inference', 'performance'], true, false
FROM config_categories WHERE category_path = 'ml.inference';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'feature_lookback_periods', id, 'ml.inference', '20'::jsonb, 'number', 'development', 'Number of historical periods for feature generation', ARRAY['ml', 'inference', 'features'], true, false
FROM config_categories WHERE category_path = 'ml.inference';

-- Training Configuration
INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'auto_retrain_enabled', id, 'ml.training', 'false'::jsonb, 'boolean', 'development', 'Enable automatic model retraining', ARRAY['ml', 'training'], true, false
FROM config_categories WHERE category_path = 'ml.training';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'retrain_interval_hours', id, 'ml.training', '24'::jsonb, 'number', 'development', 'Hours between automatic retraining', ARRAY['ml', 'training'], true, false
FROM config_categories WHERE category_path = 'ml.training';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'training_data_window_days', id, 'ml.training', '30'::jsonb, 'number', 'development', 'Days of historical data for training', ARRAY['ml', 'training'], true, false
FROM config_categories WHERE category_path = 'ml.training';

-- === MONITORING CONFIGURATION ===

-- Performance Monitoring
INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'metrics_collection_interval_ms', id, 'monitoring', '1000'::jsonb, 'number', 'development', 'Metrics collection interval in milliseconds', ARRAY['monitoring', 'metrics'], true, false
FROM config_categories WHERE category_path = 'monitoring';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'enable_prometheus_metrics', id, 'monitoring', 'true'::jsonb, 'boolean', 'development', 'Enable Prometheus metrics collection', ARRAY['monitoring', 'prometheus'], false, true
FROM config_categories WHERE category_path = 'monitoring';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'alert_latency_threshold_ms', id, 'monitoring', '1000'::jsonb, 'number', 'development', 'Alert threshold for high latency in milliseconds', ARRAY['monitoring', 'alerts', 'latency'], true, false
FROM config_categories WHERE category_path = 'monitoring';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'alert_latency_threshold_ms', id, 'monitoring', '100'::jsonb, 'number', 'production', 'Production latency alert threshold - much lower', ARRAY['monitoring', 'alerts', 'latency'], true, false
FROM config_categories WHERE category_path = 'monitoring';

-- === PERFORMANCE TUNING CONFIGURATION ===

-- CPU and Memory Settings
INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'worker_threads', id, 'performance', '4'::jsonb, 'number', 'development', 'Number of worker threads per service', ARRAY['performance', 'threading'], false, true
FROM config_categories WHERE category_path = 'performance';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'worker_threads', id, 'performance', '16'::jsonb, 'number', 'production', 'Production worker thread count', ARRAY['performance', 'threading'], false, true
FROM config_categories WHERE category_path = 'performance';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'enable_cpu_affinity', id, 'performance', 'false'::jsonb, 'boolean', 'development', 'Enable CPU affinity for performance', ARRAY['performance', 'cpu'], false, true
FROM config_categories WHERE category_path = 'performance';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'enable_cpu_affinity', id, 'performance', 'true'::jsonb, 'boolean', 'production', 'Enable CPU affinity in production for low latency', ARRAY['performance', 'cpu'], false, true
FROM config_categories WHERE category_path = 'performance';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'enable_simd_optimization', id, 'performance', 'true'::jsonb, 'boolean', 'development', 'Enable SIMD optimizations', ARRAY['performance', 'simd'], false, true
FROM config_categories WHERE category_path = 'performance';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'garbage_collection_frequency_ms', id, 'performance', '60000'::jsonb, 'number', 'development', 'Memory garbage collection frequency', ARRAY['performance', 'memory'], false, true
FROM config_categories WHERE category_path = 'performance';

-- === TLI-SPECIFIC CONFIGURATION ===

INSERT INTO config_categories (category_name, parent_id, category_path, description, is_system, display_order) VALUES
('tli', NULL, 'tli', 'Terminal interface and dashboard configuration', false, 9);

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'grpc_port', id, 'tli', '50051'::jsonb, 'number', 'development', 'gRPC server port for TLI service', ARRAY['tli', 'grpc'], false, true
FROM config_categories WHERE category_path = 'tli';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'web_dashboard_port', id, 'tli', '8080'::jsonb, 'number', 'development', 'Web dashboard port', ARRAY['tli', 'dashboard'], false, true
FROM config_categories WHERE category_path = 'tli';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'enable_real_time_streaming', id, 'tli', 'true'::jsonb, 'boolean', 'development', 'Enable real-time data streaming to dashboard', ARRAY['tli', 'streaming'], true, false
FROM config_categories WHERE category_path = 'tli';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'max_concurrent_sessions', id, 'tli', '10'::jsonb, 'number', 'development', 'Maximum concurrent TLI sessions', ARRAY['tli', 'sessions'], true, false
FROM config_categories WHERE category_path = 'tli';

INSERT INTO config_settings (config_key, category_id, category_path, config_value, value_type, environment, description, tags, hot_reload, restart_required)
SELECT 'session_timeout_minutes', id, 'tli', '60'::jsonb, 'number', 'development', 'TLI session timeout in minutes', ARRAY['tli', 'sessions'], true, false
FROM config_categories WHERE category_path = 'tli';

-- === INITIAL CONFIGURATION SUBSCRIPTIONS ===

-- TLI Service subscribes to all configuration changes
INSERT INTO config_subscriptions (service_name, config_pattern, category_pattern, environment, subscription_type, is_active) VALUES
('tli', '*', '*', 'development', 'notify', true),
('tli', '*', '*', 'production', 'notify', true);

-- Trading service subscribes to trading and risk configurations
INSERT INTO config_subscriptions (service_name, config_pattern, category_pattern, environment, subscription_type, is_active) VALUES
('trading_engine', 'trading.*', 'trading.*', 'development', 'notify', true),
('trading_engine', 'risk.*', 'risk.*', 'development', 'notify', true),
('trading_engine', 'trading.*', 'trading.*', 'production', 'notify', true),
('trading_engine', 'risk.*', 'risk.*', 'production', 'notify', true);

-- ML service subscribes to ML configurations
INSERT INTO config_subscriptions (service_name, config_pattern, category_pattern, environment, subscription_type, is_active) VALUES
('ml_service', 'ml.*', 'ml.*', 'development', 'notify', true),
('ml_service', 'ml.*', 'ml.*', 'production', 'notify', true);

-- All services subscribe to system configurations
INSERT INTO config_subscriptions (service_name, config_pattern, category_pattern, environment, subscription_type, is_active) VALUES
('*', 'system.*', 'system.*', 'development', 'notify', true),
('*', 'system.*', 'system.*', 'production', 'notify', true);

-- === UPDATE STATISTICS ===
ANALYZE config_categories;
ANALYZE config_settings;
ANALYZE config_history;
ANALYZE config_environments;
ANALYZE config_environment_overrides;
ANALYZE config_subscriptions;
ANALYZE config_locks;

-- Initial configuration data loaded successfully!
-- 
-- Created:
-- - 4 environments: development, test, staging, production
-- - 24 configuration categories with hierarchical organization
-- - 67 configuration settings with environment-specific values
-- - Initial service subscriptions for hot-reload notifications
--
-- Key Features:
-- - Environment inheritance (staging inherits from development)
-- - Hot-reload enabled for most operational settings
-- - Restart required only for core infrastructure changes
-- - Sensitive settings marked appropriately
-- - Performance-optimized values for production vs development
-- - Complete subscription setup for real-time configuration updates
--
-- Next Steps:
-- 1. Services can start listening to 'foxhunt_config_changes' channel
-- 2. Use get_config_value('key', 'environment') to retrieve configuration
-- 3. Use set_config_value('key', value, 'environment') to update configuration
-- 4. TLI dashboard can manage all configurations through PostgreSQL