"""
Panel interno de la evidencia de indexación.

Existe por una pregunta concreta que se hace meses después: «¿qué le mandamos a
Google el 14 de marzo y qué contestó?». La pantalla del lote la responde bien
mientras alguien recuerde de qué lote se trata; cuando lo que hay es una fecha o
una dirección suelta, hace falta poder **buscar**, y para eso está esto.

Es de sólo lectura, entera y a propósito. Estas filas son la prueba: un panel
que permita editarlas convierte «lo que Google contestó» en «lo que alguien dejó
escrito», que es exactamente lo contrario de para lo que se guardan. Tampoco se
pueden crear ni borrar — la tabla no se purga nunca, y es la única del producto
con esa propiedad.
"""

from django.contrib import admin

from apps.indexing.models import IndexingRequest


@admin.register(IndexingRequest)
class IndexingRequestAdmin(admin.ModelAdmin):
    """Un pedido, con las dos puntas tal como viajaron."""

    list_display = ['loc', 'state', 'response_status', 'error_code', 'sent_at', 'batch']
    list_filter = ['state', 'error_code', 'batch__domain']
    # Por dirección y por lote, que son las dos formas en que llega la pregunta:
    # «esta página» o «esa vez que mandamos un montón».
    search_fields = ['loc', 'batch__id']
    date_hierarchy = 'created_at'
    ordering = ['-created_at']

    readonly_fields = [
        'batch',
        'url',
        'loc',
        'position',
        'state',
        'sent_at',
        'request_body',
        'response_status',
        'response_body',
        'error_code',
        'error_message',
        'created_at',
        'updated_at',
    ]

    def has_add_permission(self, request):
        return False

    def has_change_permission(self, request, obj=None):
        return False

    def has_delete_permission(self, request, obj=None):
        """
        Ni desde acá.

        Un pedido y su respuesta no se borran nunca. Si el lote entero sobra,
        se borra el lote —y sólo mientras siga en borrador, o sea mientras no
        haya salido nada—; una fila suelta que desaparece deja un hueco en el
        único registro que este producto promete conservar.
        """
        return False

    def get_queryset(self, request):
        # `batch` y su dominio se muestran en cada renglón de la lista: sin esto
        # son dos consultas por fila.
        return super().get_queryset(request).select_related('batch', 'batch__domain')
