"""
SEO Template Tags
For easy SEO implementation in templates
"""
from django import template
from django.utils.safestring import mark_safe
import json

register = template.Library()


@register.simple_tag
def seo_meta_tags(page_url=None, page_type='CUSTOM'):
    """
    Render complete meta tags for SEO
    Usage: {% seo_meta_tags request.path %}
    """
    from ..seo_models import SEOSettings
    
    try:
        seo = SEOSettings.objects.get(page_url=page_url, is_active=True)
    except SEOSettings.DoesNotExist:
        return ''
    
    meta_tags = []
    
    # Basic Meta
    meta_tags.append(f'<title>{seo.meta_title}</title>')
    meta_tags.append(f'<meta name="description" content="{seo.meta_description}">')
    
    if seo.meta_keywords:
        meta_tags.append(f'<meta name="keywords" content="{seo.meta_keywords}">')
    
    # Robots
    robots = []
    if seo.noindex:
        robots.append('noindex')
    if seo.nofollow:
        robots.append('nofollow')
    if robots:
        meta_tags.append(f'<meta name="robots" content="{", ".join(robots)}">')
    
    # Canonical
    canonical = seo.canonical_url or f'https://{{ site_config.site_name }}.com{page_url}'
    meta_tags.append(f'<link rel="canonical" href="{canonical}">')
    
    # Open Graph
    if seo.og_title:
        meta_tags.append(f'<meta property="og:title" content="{seo.og_title}">')
        meta_tags.append(f'<meta property="og:description" content="{seo.og_description or seo.meta_description}">')
        meta_tags.append(f'<meta property="og:type" content="{seo.og_type}">')
        if seo.og_image:
            meta_tags.append(f'<meta property="og:image" content="{seo.og_image.url}">')
    
    # Twitter Card
    if seo.twitter_title:
        meta_tags.append(f'<meta name="twitter:card" content="{seo.twitter_card}">')
        meta_tags.append(f'<meta name="twitter:title" content="{seo.twitter_title}">')
        meta_tags.append(f'<meta name="twitter:description" content="{seo.twitter_description or seo.meta_description}">')
        if seo.twitter_image:
            meta_tags.append(f'<meta name="twitter:image" content="{seo.twitter_image.url}">')
    
    return mark_safe('\n'.join(meta_tags))


@register.simple_tag
def schema_org(schema_type=None, data=None):
    """
    Render Schema.org JSON-LD
    Usage: {% schema_org 'Product' product_data %}
    """
    if not data:
        return ''
    
    schema_script = f'''
    <script type="application/ld+json">
    {json.dumps(data, indent=2)}
    </script>
    '''
    
    return mark_safe(schema_script)


@register.simple_tag
def theme_css():
    """
    Render theme CSS variables
    Usage: {% theme_css %}
    """
    from ..seo_models import Theme
    
    theme = Theme.get_active_theme()
    if not theme:
        return ''
    
    css = f'''
    <style>
        :root {{
            --primary-color: {theme.primary_color};
            --secondary-color: {theme.secondary_color};
            --accent-color: {theme.accent_color};
            --text-color: {theme.text_color};
            --background-color: {theme.background_color};
        }}
        body {{
            font-family: {theme.font_family};
            color: var(--text-color);
            background-color: var(--background-color);
        }}
        {theme.custom_css}
    </style>
    '''
    
    if theme.font_url:
        css = f'<link href="{theme.font_url}" rel="stylesheet">\n' + css
    
    return mark_safe(css)


@register.simple_tag
def theme_js():
    """
    Render theme JavaScript
    """
    from ..seo_models import Theme
    
    theme = Theme.get_active_theme()
    if not theme or not theme.custom_js:
        return ''
    
    return mark_safe(f'<script>{theme.custom_js}</script>')


@register.simple_tag
def breadcrumb_schema(items):
    """
    Generate breadcrumb schema
    items: [{'name': 'Home', 'url': '/'}, ...]
    """
    schema = {
        "@context": "https://schema.org",
        "@type": "BreadcrumbList",
        "itemListElement": []
    }
    
    for i, item in enumerate(items, 1):
        schema["itemListElement"].append({
            "@type": "ListItem",
            "position": i,
            "name": item['name'],
            "item": item['url']
        })
    
    return schema_org('BreadcrumbList', schema)
