"""
Template tags для отображения индикаторов качества фотографий.
Используется в шаблонах для ненавязчивого показа качества фото товаров.
"""

from django import template
from django.utils.html import format_html
from django.conf import settings

register = template.Library()


@register.filter
def quality_badge_mini(photo):
    """
    Возвращает маленький индикатор качества для вывода в уголке фото.
    Используется в сетках фотографий товаров.

    Выводит маленький кружочек-значок в правом верхнем углу:
    - 🟢 зелёный - excellent/good (отлично/хорошо)
    - 🟡 жёлтый - acceptable (приемлемо)
    - 🟠 оранжевый - poor (плохо)
    - 🔴 красный - very_poor (очень плохо)

    Если есть warning - показывает ⚠️
    """
    if not photo or not hasattr(photo, 'quality_level'):
        return ''

    quality_level = photo.quality_level
    has_warning = getattr(photo, 'quality_warning', False)

    # Если нужно обновление фото - показываем warning
    if has_warning:
        return format_html(
            '<span class="quality-badge-mini" '
            'title="Фото требует обновления" '
            'data-bs-toggle="tooltip" '
            'data-bs-placement="top">'
            '⚠️'
            '</span>'
        )

    # Символы для разных уровней качества
    quality_symbols = {
        'excellent': ('🟢', 'Отлично'),
        'good': ('🟡', 'Хорошо'),
        'acceptable': ('🟠', 'Приемлемо'),
        'poor': ('🔴', 'Плохо'),
        'very_poor': ('🔴', 'Очень плохо'),
    }

    symbol, label = quality_symbols.get(quality_level, ('⚪', 'Неизвестно'))

    return format_html(
        '<span class="quality-badge-mini" '
        'title="{}" '
        'data-bs-toggle="tooltip" '
        'data-bs-placement="top">'
        '{}'
        '</span>',
        label,
        symbol
    )


@register.filter
def quality_badge_full(photo):
    """
    Возвращает полный индикатор качества с размером фото.

    Выводит: "🟢 Отлично (2150×2150px)" или "⚠️ Требует обновления"
    """
    if not photo or not hasattr(photo, 'quality_level'):
        return ''

    quality_level = photo.quality_level
    has_warning = getattr(photo, 'quality_warning', False)
    width = getattr(photo, 'width', None)
    height = getattr(photo, 'height', None)

    # Если нужно обновление - показываем warning
    if has_warning:
        return format_html(
            '<span class="badge bg-danger">'
            '⚠️ Требует обновления'
            '</span>'
        )

    # Символы и названия
    quality_info = {
        'excellent': ('🟢', 'Отлично', 'success'),
        'good': ('🟡', 'Хорошо', 'info'),
        'acceptable': ('🟠', 'Приемлемо', 'warning'),
        'poor': ('🔴', 'Плохо', 'danger'),
        'very_poor': ('🔴', 'Очень плохо', 'danger'),
    }

    symbol, label, color = quality_info.get(quality_level, ('⚪', 'Неизвестно', 'secondary'))

    # Если есть размеры - добавляем их
    size_info = ''
    if width and height:
        size_info = f' ({width}×{height}px)'

    return format_html(
        '<span class="badge bg-{}">{} {}{}</span>',
        color,
        symbol,
        label,
        size_info
    )


@register.inclusion_tag('products/includes/quality_badge.html')
def quality_indicator(photo, show_size=False):
    """
    Включаемый тег для вывода индикатора качества в углу фото.
    Используется с позиционированием в углу через CSS.

    Параметры:
    - photo: объект фото (ProductPhoto, ProductKitPhoto или ProductCategoryPhoto)
    - show_size: показывать ли размер фото (по умолчанию False)
    """
    if not photo or not hasattr(photo, 'quality_level'):
        return {
            'show': False,
            'quality_level': None,
            'has_warning': False,
        }

    quality_level = photo.quality_level
    has_warning = getattr(photo, 'quality_warning', False)
    width = getattr(photo, 'width', None)
    height = getattr(photo, 'height', None)

    # Информация о качестве
    quality_info = {
        'excellent': {'symbol': '🟢', 'label': 'Отлично', 'color': 'success', 'tooltip': 'Отличное качество'},
        'good': {'symbol': '🟡', 'label': 'Хорошо', 'color': 'info', 'tooltip': 'Хорошее качество'},
        'acceptable': {'symbol': '🟠', 'label': 'Приемлемо', 'color': 'warning', 'tooltip': 'Приемлемое качество'},
        'poor': {'symbol': '🔴', 'label': 'Плохо', 'color': 'danger', 'tooltip': 'Плохое качество'},
        'very_poor': {'symbol': '🔴', 'label': 'Очень плохо', 'color': 'danger', 'tooltip': 'Очень плохое качество'},
    }

    info = quality_info.get(quality_level, {
        'symbol': '⚪',
        'label': 'Неизвестно',
        'color': 'secondary',
        'tooltip': 'Качество не определено'
    })

    # Размер фото если требуется
    size_text = ''
    if show_size and width and height:
        size_text = f'{width}×{height}px'

    return {
        'show': True,
        'quality_level': quality_level,
        'has_warning': has_warning,
        'symbol': info['symbol'],
        'label': info['label'],
        'color': info['color'],
        'tooltip': info['tooltip'],
        'size_text': size_text,
    }


@register.filter
def quality_icon_only(photo):
    """
    Возвращает только символ качества (например: 🟢)
    для компактного отображения в списках.
    """
    if not photo or not hasattr(photo, 'quality_level'):
        return ''

    quality_level = photo.quality_level
    has_warning = getattr(photo, 'quality_warning', False)

    if has_warning:
        return '⚠️'

    symbols = {
        'excellent': '🟢',
        'good': '🟡',
        'acceptable': '🟠',
        'poor': '🔴',
        'very_poor': '🔴',
    }

    return symbols.get(quality_level, '⚪')
