from django import template
from django.utils.safestring import mark_safe
from ..models import ProcessInstance, StepInstance

register = template.Library()

@register.filter(name='get_item')
def get_item(mapping, key):
	try:
		return mapping.get(key)
	except Exception:
		return None

@register.inclusion_tag('processes/includes/stepper_header.html')
def stepper_header(instance, current_step=None):
    """رندر کردن header مراحل برای instance"""
    if not isinstance(instance, ProcessInstance):
        return {}
    
    steps = list(instance.process.steps.all().order_by('order'))
    step_instances = instance.step_instances.select_related('step').all()
    step_id_to_status = {si.step_id: si.status for si in step_instances}
    
    steps_context = []
    for step in steps:
        step_instance = next((si for si in step_instances if si.step_id == step.id), None)
        status = step_id_to_status.get(step.id, 'pending')
        
        # بررسی دسترسی به مرحله (UI navigation constraints):
        # can_access = instance.can_access_step(step)
        # فقط مراحل تکمیل‌شده یا مرحله جاری قابل کلیک هستند
        can_access = (step_id_to_status.get(step.id) == 'completed') or (instance.current_step and step.id == instance.current_step.id)
        # مرحله انتخاب‌شده (نمایش فعلی)
        is_selected = bool(current_step and step.id == current_step.id)
        # مرحله‌ای که باید انجام شود (مرحله جاری در instance)
        is_todo = bool(instance.current_step and step.id == instance.current_step.id)
        
        steps_context.append({
            'step': step,
            'status': status,
            'can_access': can_access,
            'is_selected': is_selected,
            'is_todo': is_todo,
            'step_instance': step_instance,
        })
    
    return {
        'instance': instance,
        'steps_context': steps_context,
    }

# moved to _base/common/templatetags/common_tags.py

@register.inclusion_tag('processes/includes/instance_info_modal.html')
def instance_info_modal(instance, modal_id=None):
    """
    نمایش مدال اطلاعات کامل چاه و نماینده
    
    استفاده:
    {% load processes_tags %}
    {% instance_info_modal instance %}
    
    یا با modal_id سفارشی:
    {% instance_info_modal instance "myCustomModal" %}
    """
    if not isinstance(instance, ProcessInstance):
        return {}
    
    if not modal_id:
        modal_id = f"instanceInfoModal_{instance.id}"
    
    return {
        'instance': instance,
        'modal_id': modal_id,
        'well': instance.well,
        'representative': instance.representative,
    }

@register.simple_tag
def instance_info(instance, modal_id=None):
    """
    آیکون info برای نمایش مدال اطلاعات
    
    استفاده:
    {% load processes_tags %}
    نام کاربر: {{ user.name }} {% instance_info_icon instance %}
    
    یا با modal_id سفارشی:
    {% instance_info_icon instance "myCustomModal" %}
    """
    if not isinstance(instance, ProcessInstance):
        return ""
    
    if not modal_id:
        modal_id = f"instanceInfoModal_{instance.id}"
    
    html = f'''
    اشتراک آب: {instance.well.water_subscription_number }
    | نماینده: {instance.representative.profile.national_code }
    <i class="bx bx-info-circle text-muted ms-1" 
       style="cursor: pointer; font-size: 14px;" 
       data-bs-toggle="modal" 
       data-bs-target="#{modal_id}" 
       title="اطلاعات کامل چاه و نماینده"></i>
    '''
    return mark_safe(html)
