from django import template
from django.urls import reverse, NoReverseMatch
from django.utils.safestring import mark_safe
from cms.analytics_config import GA4Config
import json

register = template.Library()


@register.simple_tag(takes_context=True)
def regional_url(context, view_name, **kwargs):
    """
    Generates a URL for the given view_name, preserving the current region if set.
    """
    request = context.get('request')
    if not request:
        return reverse(view_name, kwargs=kwargs)
    
    path = request.path
    current_region = None
    
    if path.startswith('/uk/'):
        current_region = 'uk'
    elif path.startswith('/ca/'):
        current_region = 'ca'
    elif path.startswith('/uae/'):
        current_region = 'uae'
    elif path.startswith('/ireland/'):
        current_region = 'ireland'
    
    try:
        url = reverse(view_name, kwargs=kwargs)
    except NoReverseMatch:
        return ''
    
    if current_region:
        if url.startswith('/'):
            url = url[1:]
        url = '/{}/{}'.format(current_region, url)
    
    return url


@register.filter
def lazy_image(image_url, alt_text=''):
    """Convert image URL to lazy-loaded image tag.
    
    Note: Provide descriptive alt_text for meaningful images.
    Use alt_text='' for decorative images only.
    """
    if not image_url:
        return ''
    
    img_tag = '<img src="{}" alt="{}" loading="lazy" decoding="async" />'.format(
        image_url, alt_text
    )
    return mark_safe(img_tag)


@register.inclusion_tag('components/lazy_image.html')
def lazy_image_tag(image_url, alt_text='', css_class=''):
    """Render lazy-loaded image with responsive sizes.
    
    Note: Provide descriptive alt_text for meaningful images.
    Use alt_text='' for decorative images only.
    """
    return {
        'image_url': image_url,
        'alt_text': alt_text,
        'css_class': css_class,
    }


@register.simple_tag
def ga4_tracking_code():
    """Render GA4 tracking code in template."""
    return mark_safe(GA4Config.get_ga4_script_tag())


@register.simple_tag
def ga4_event_tracking(event_name, **kwargs):
    """Render GA4 event tracking code."""
    from cms.analytics_config import AnalyticsEventTracker
    return mark_safe(AnalyticsEventTracker.get_event_script(event_name, kwargs))


from cms.internal_linking import InternalLinkingManager


@register.simple_tag
def breadcrumbs(page_type, page_title=None, page_url=None, region_code=None):
    """Generate breadcrumb navigation."""
    crumbs = InternalLinkingManager.get_breadcrumbs(
        page_type, page_title, page_url, region_code
    )
    
    html = '<nav aria-label="breadcrumb"><ol class="breadcrumb flex items-center space-x-2 text-sm">'
    for i, crumb in enumerate(crumbs):
        if i == len(crumbs) - 1:
            html += '<li class="breadcrumb-item text-gray-600" aria-current="page">{}</li>'.format(
                crumb["name"]
            )
        else:
            html += '<li class="breadcrumb-item"><a href="{}" class="text-blue-600 hover:text-blue-800">{}</a>'.format(
                crumb["url"], crumb["name"]
            )
            if i < len(crumbs) - 1:
                html += ' <span class="mx-2">/</span>'
            html += '</li>'
    html += '</ol></nav>'
    
    return mark_safe(html)


@register.simple_tag
def breadcrumb_schema(page_type, page_title=None, page_url=None, region_code=None, base_url='https://xinfinitygroup.com'):
    """Generate JSON-LD schema for breadcrumbs."""
    crumbs = InternalLinkingManager.get_breadcrumbs(
        page_type, page_title, page_url, region_code
    )
    schema = InternalLinkingManager.get_breadcrumb_schema(crumbs, base_url)
    return mark_safe(json.dumps(schema))


@register.simple_tag
def footer_links(region_code=None):
    """Generate footer navigation links."""
    return InternalLinkingManager.get_footer_links(region_code)


@register.simple_tag
def related_services(current_service, all_services):
    """Generate related service links."""
    return InternalLinkingManager.get_service_cross_links(current_service, all_services)


@register.simple_tag
def contextual_link(text, url, title=None, css_class=''):
    """Create a contextual internal link."""
    return InternalLinkingManager.create_contextual_link(text, url, title, css_class)
