"""
Analytics Cache Manager

Provides a unified interface for caching analytics data with platform-specific configurations.
"""

from typing import Dict, Any, Optional
from loguru import logger

from ..analytics_cache_service import analytics_cache
from .models.platform_types import PlatformType


class AnalyticsCacheManager:
    """Manages caching for analytics data with platform-specific TTL configurations"""
    
    def __init__(self):
        # Platform-specific cache TTL configurations (in seconds)
        self.cache_ttl = {
            PlatformType.GSC: 3600,        # 1 hour
            PlatformType.BING: 3600,       # 1 hour (expensive operation)
            PlatformType.WORDPRESS: 1800,  # 30 minutes
            PlatformType.WIX: 1800,        # 30 minutes
            'platform_status': 1800,       # 30 minutes
            'analytics_summary': 900,      # 15 minutes
        }
    
    def get_cached_analytics(self, platform: PlatformType, user_id: str) -> Optional[Dict[str, Any]]:
        """Get cached analytics data for a platform"""
        cache_key = f"{platform.value}_analytics"
        cached_data = analytics_cache.get(cache_key, user_id)
        
        if cached_data:
            logger.info(f"Cache HIT: {platform.value} analytics for user {user_id}")
            return cached_data
        
        logger.info(f"Cache MISS: {platform.value} analytics for user {user_id}")
        return None
    
    def set_cached_analytics(self, platform: PlatformType, user_id: str, data: Dict[str, Any], ttl_override: Optional[int] = None):
        """Cache analytics data for a platform"""
        cache_key = f"{platform.value}_analytics"
        ttl = ttl_override or self.cache_ttl.get(platform, 1800)  # Default 30 minutes
        
        analytics_cache.set(cache_key, user_id, data, ttl_override=ttl)
        logger.info(f"Cached {platform.value} analytics for user {user_id} (TTL: {ttl}s)")
    
    def get_cached_platform_status(self, user_id: str) -> Optional[Dict[str, Any]]:
        """Get cached platform connection status"""
        cached_data = analytics_cache.get('platform_status', user_id)
        
        if cached_data:
            logger.info(f"Cache HIT: platform status for user {user_id}")
            return cached_data
        
        logger.info(f"Cache MISS: platform status for user {user_id}")
        return None
    
    def set_cached_platform_status(self, user_id: str, status_data: Dict[str, Any]):
        """Cache platform connection status"""
        ttl = self.cache_ttl['platform_status']
        analytics_cache.set('platform_status', user_id, status_data, ttl_override=ttl)
        logger.info(f"Cached platform status for user {user_id} (TTL: {ttl}s)")
    
    def get_cached_summary(self, user_id: str) -> Optional[Dict[str, Any]]:
        """Get cached analytics summary"""
        cached_data = analytics_cache.get('analytics_summary', user_id)
        
        if cached_data:
            logger.info(f"Cache HIT: analytics summary for user {user_id}")
            return cached_data
        
        logger.info(f"Cache MISS: analytics summary for user {user_id}")
        return None
    
    def set_cached_summary(self, user_id: str, summary_data: Dict[str, Any]):
        """Cache analytics summary"""
        ttl = self.cache_ttl['analytics_summary']
        analytics_cache.set('analytics_summary', user_id, summary_data, ttl_override=ttl)
        logger.info(f"Cached analytics summary for user {user_id} (TTL: {ttl}s)")
    
    def invalidate_platform_cache(self, platform: PlatformType, user_id: str):
        """Invalidate cache for a specific platform"""
        cache_key = f"{platform.value}_analytics"
        analytics_cache.invalidate(cache_key, user_id)
        logger.info(f"Invalidated {platform.value} analytics cache for user {user_id}")
    
    def invalidate_user_cache(self, user_id: str):
        """Invalidate all cache entries for a user"""
        analytics_cache.invalidate_user(user_id)
        logger.info(f"Invalidated all analytics cache for user {user_id}")
    
    def invalidate_platform_status_cache(self, user_id: str):
        """Invalidate platform status cache for a user"""
        analytics_cache.invalidate('platform_status', user_id)
        logger.info(f"Invalidated platform status cache for user {user_id}")
    
    def invalidate_summary_cache(self, user_id: str):
        """Invalidate analytics summary cache for a user"""
        analytics_cache.invalidate('analytics_summary', user_id)
        logger.info(f"Invalidated analytics summary cache for user {user_id}")
    
    def get_cache_stats(self) -> Dict[str, Any]:
        """Get cache statistics"""
        return analytics_cache.get_stats()
    
    def clear_all_cache(self):
        """Clear all analytics cache"""
        analytics_cache.clear_all()
        logger.info("Cleared all analytics cache")
