# proveedores/admin.py
from django.contrib import admin
from django.utils.html import format_html
from django.urls import reverse
from django.utils.safestring import mark_safe
from .models import Proveedor, ProveedorReferencia

@admin.register(Proveedor)
class ProveedorAdmin(admin.ModelAdmin):
    list_display = (
        'nombre_empresa',
        'nit',
        'contacto_compra',
        'telefono_contacto',
        'email_contacto',
        'activo',
        'referencias_count',
        'actions_column',
    )
    
    list_filter = ('activo',)
    search_fields = (
        'nombre_empresa',
        'nit',
        'contacto_compra',
        'email',
        'email_contacto',
    )
    list_per_page = 50
    actions = ['activar_proveedores', 'desactivar_proveedores']
    
    fieldsets = (
    ('Información Principal', {
        'fields': (
            ('nombre_empresa',),  # Se muestra en una fila
            ('nit',),             # Se muestra en la siguiente fila (nit "se pasa para abajo")
            'direccion',          # Se muestra en su propia fila
            ('telefono'),('email'),# En esta fila se mostrarán juntos
        )
    }),

        ('Contacto de Compras', {
            'fields': (
                ('contacto_compra'),( 'telefono_contacto'),
                'email_contacto',
            )
        }),
        ('Estado', {
            'fields': ('activo',)
        }),
    )
    
    def referencias_count(self, obj):
        count = obj.referencias_proveedor.count()
        url = (
            reverse('admin:proveedores_proveedorreferencia_changelist') 
            + f'?proveedor__id__exact={obj.id}'
        )
        return format_html('<a href="{}">{} Referencias</a>', url, count)
    referencias_count.short_description = 'Referencias'
    
    def actions_column(self, obj):
        return format_html(
            '''
            <div class="action-buttons">
                <a class="button" href="{}" title="Editar">✏️</a>
                <a class="button" href="{}" title="Referencias">🔄</a>
            </div>
            ''',
            reverse('admin:proveedores_proveedor_change', args=[obj.id]),
            reverse('admin:proveedores_proveedorreferencia_add') + f'?proveedor={obj.id}'
        )
    actions_column.short_description = 'Acciones'
    actions_column.allow_tags = True
    
    def activar_proveedores(self, request, queryset):
        updated = queryset.update(activo=True)
        self.message_user(request, f"{updated} proveedores activados")
    activar_proveedores.short_description = "Activar proveedores seleccionados"
    
    def desactivar_proveedores(self, request, queryset):
        updated = queryset.update(activo=False)
        self.message_user(request, f"{updated} proveedores desactivados")
    desactivar_proveedores.short_description = "Desactivar proveedores seleccionados"

class ProveedorReferenciaInline(admin.TabularInline):
    model = ProveedorReferencia
    extra = 1
    fields = (
        'referencia',
        'lead_time_total',
        'minimo_unidades',
        'empaque',
        'unidades_por_empaque',
    )
    readonly_fields = ('lead_time_total',)
    autocomplete_fields = ('referencia', 'empaque')
    verbose_name = 'Referencia suministrada'
    verbose_name_plural = 'Referencias suministradas'

@admin.register(ProveedorReferencia)
class ProveedorReferenciaAdmin(admin.ModelAdmin):
    list_display = (
        'proveedor_link',
        'referencia_link',
        'referencia_descripcion',
        'referencia_unidad',
        'lead_time_total',
        'minimo_unidades',
        'empaque',
        'unidades_por_empaque',
        'pedido_minimo',
        'esta_certificado',
    )


    list_filter = (
        'proveedor',
        'referencia__tipo',
        'referencia__clasificacion',
    )

    search_fields = (
        'proveedor__nombre_empresa',
        'proveedor__nit',
        'referencia__sku',
        'referencia__descripcion',
    )

    list_select_related = ('proveedor', 'referencia', 'empaque')
    raw_id_fields = ('referencia',)
    autocomplete_fields = ('proveedor', 'empaque')
    list_per_page = 50

    fieldsets = (
        (None, {
            'fields': (
                ('proveedor', 'referencia'),
                ('lead_time_generar_orden', 'lead_time_proveedor'),
                'lead_time_total',
                ('minimo_unidades', 'unidades_por_empaque'),
                'empaque',
                'esta_certificado',
            )
        }),
    )


    readonly_fields = ('lead_time_total',)

    # Métodos personalizados para mostrar los nuevos campos
    def referencia_descripcion(self, obj):
        return obj.referencia.descripcion
    referencia_descripcion.short_description = 'Descripción'

    def referencia_unidad(self, obj):
        return obj.referencia.unidad.nombre  # Asegúrate que 'nombre' es el campo que quieres mostrar
    referencia_unidad.short_description = 'Unidad'

    
    def proveedor_link(self, obj):
        url = reverse('admin:proveedores_proveedor_change', args=[obj.proveedor.id])
        return mark_safe(f'<a href="{url}">{obj.proveedor}</a>')
    proveedor_link.short_description = 'Proveedor'
    
    def referencia_link(self, obj):
        url = reverse('admin:referencias_referencia_change', args=[obj.referencia.id])
        return mark_safe(f'<a href="{url}">{obj.referencia.sku}</a>')
    referencia_link.short_description = 'Referencia'
    
    def pedido_minimo(self, obj):
        return f"{obj.minimo_unidades} {obj.referencia.unidad.abreviatura}"
    pedido_minimo.short_description = 'Pedido Mínimo'
    
    def get_queryset(self, request):
        qs = super().get_queryset(request)
        return qs.select_related('referencia__unidad')