import re
from django import template
from django.utils.safestring import mark_safe

register = template.Library()  # ✅ SIRF EK BAAR — yahi sahi hai


# ─────────────────────────────────────────────
# Filter 1: convert_flags
# ─────────────────────────────────────────────
@register.filter
def convert_flags(text):
    """
    Version 7.0: CDN Image based Flags (Windows-Proof)
    Uses flagcdn.com for 100% reliability.
    """
    if not text:
        return ""

    text = str(text)

    colon_pattern = r'(?::|&#58;)\s*([a-zA-Z]{2})\s*(?::|&#58;)'
    emoji_pattern = r'([\U0001f1e6-\U0001f1ff]{2})'

    def wrap_in_img(code):
        code = code.lower()
        return f'<img src="https://flagcdn.com/w40/{code}.png" class="flag-img-cdn" alt="{code}" loading="lazy">'

    def colon_replace(match):
        return wrap_in_img(match.group(1))

    text = re.sub(colon_pattern, colon_replace, text)

    def emoji_replace(match):
        emoji_str = match.group(1)
        code = "".join(chr(ord(c) - 127397) for c in emoji_str)
        return wrap_in_img(code)

    result = re.sub(emoji_pattern, emoji_replace, text)

    return mark_safe(result)


# ─────────────────────────────────────────────
# Filter 2: flag_code
# Country name → correct ISO 2-letter code
# ─────────────────────────────────────────────

COUNTRY_FLAG_MAP = {
    'Bahrain': 'bh',
    'Dubai': 'ae',
    'United Arab Emirates': 'ae',
    'Guyana': 'gy',
    'Hongkong': 'hk',
    'Kuwait': 'kw',
    'South Korea': 'kr',
    'North Korea': 'kp',
    'Russia': 'ru',
    'Czech Republic': 'cz',
    'Bosnia and Herzegovina': 'ba',
    'Dominican Republic': 'do',
    'Papua New Guinea': 'pg',
    'Saudi Arabia': 'sa',
    'South Africa': 'za',
    'Sri Lanka': 'lk',
    'Mauritius': 'mu',
    'New Zealand': 'nz',
    'Costa Rica': 'cr',
    'El Salvador': 'sv',
    'Vatican City': 'va',
    'Taiwan': 'tw',
    'Syria': 'sy',
    'United Kingdom': 'gb',
    'United States': 'us',
}


@register.filter
def flag_code(country_name):
    """
    Country name se correct ISO 2-letter flag code return karta hai.

    Usage:  {{ job.country|flag_code }}
    Result: {{ "Dubai"|flag_code }}  ->  "ae"
            {{ "Italy"|flag_code }}  ->  "it"
    """
    if not country_name:
        return 'un'

    if country_name in COUNTRY_FLAG_MAP:
        return COUNTRY_FLAG_MAP[country_name]

    return country_name[:2].lower()