"""Integration tests for pricing provider system."""

import pytest
from datetime import datetime

from src.data.pricing_service import get_pricing_service


@pytest.mark.integration
class TestPricingProviderIntegration:
    """Integration tests for pricing providers."""
    
    @pytest.fixture(autouse=True)
    def setup(self):
        """Set up test fixtures."""
        # Reset global service instance
        import src.data.pricing_service
        src.data.pricing_service._pricing_service = None
    
    def test_service_initialization(self):
        """Test that pricing service initializes correctly."""
        service = get_pricing_service()
        assert service is not None
        assert service.cache is not None
        assert service.health_monitor is not None
    
    @pytest.mark.skip(reason="Requires network access - run manually")
    def test_get_ticker_integration(self):
        """Test getting ticker data from real providers."""
        service = get_pricing_service()
        
        # This will try to connect to real providers
        ticker = service.get_ticker("BTC/USD", use_cache=False)
        
        # Should get some data if providers are available
        if ticker:
            assert 'symbol' in ticker
            assert 'last' in ticker
            assert ticker['last'] > 0
    
    @pytest.mark.skip(reason="Requires network access - run manually")
    def test_provider_failover(self):
        """Test provider failover mechanism."""
        service = get_pricing_service()
        
        # Get active provider
        active = service.get_active_provider()
        assert active is not None or len(service._providers) == 0
    
    def test_cache_integration(self):
        """Test cache integration with service."""
        service = get_pricing_service()
        
        # Set a value
        service.cache.set("test:key", "test_value", ttl=60)
        
        # Get it back
        value = service.cache.get("test:key")
        assert value == "test_value"
    
    def test_health_monitoring(self):
        """Test health monitoring integration."""
        service = get_pricing_service()
        
        # Record some metrics
        service.health_monitor.record_success("test_provider", 0.5)
        service.health_monitor.record_failure("test_provider")
        
        # Check health
        is_healthy = service.health_monitor.is_healthy("test_provider")
        assert isinstance(is_healthy, bool)
