"""
SEO Middleware
Handles redirects and meta tags
"""
from django.shortcuts import redirect
from django.urls import resolve
from .seo_models import URLRedirect
from django.core.cache import cache


class SEORedirectMiddleware:
    """
    Handles 301/302 redirects for SEO
    """
    def __init__(self, get_response):
        self.get_response = get_response
    
    def __call__(self, request):
        # Check for URL redirect
        path = request.path
        
        # Try cache first
        cache_key = f'redirect_{path}'
        redirect_url = cache.get(cache_key)
        
        if redirect_url is None:
            try:
                url_redirect = URLRedirect.objects.get(old_url=path, is_active=True)
                redirect_url = url_redirect.new_url
                redirect_type = url_redirect.redirect_type
                
                # Update hit count
                url_redirect.hit_count += 1
                url_redirect.save(update_fields=['hit_count'])
                
                # Cache the redirect
                cache.set(cache_key, (redirect_url, redirect_type), 3600)
                
                # Perform redirect
                if redirect_type == '301':
                    return redirect(redirect_url, permanent=True)
                else:
                    return redirect(redirect_url, permanent=False)
            except URLRedirect.DoesNotExist:
                cache.set(cache_key, False, 3600)
        elif redirect_url:
            redirect_url, redirect_type = redirect_url
            if redirect_type == '301':
                return redirect(redirect_url, permanent=True)
            else:
                return redirect(redirect_url, permanent=False)
        
        response = self.get_response(request)
        return response


class ThemeMiddleware:
    """
    Apply active theme to all requests
    """
    def __init__(self, get_response):
        self.get_response = get_response
    
    def __call__(self, request):
        from .seo_models import Theme
        
        # Get active theme
        theme = Theme.get_active_theme()
        request.active_theme = theme
        
        response = self.get_response(request)
        return response
