"""Endpoints de lotes."""

from drf_spectacular.utils import extend_schema
from rest_framework import serializers
from rest_framework.response import Response

from apps.core.api import BaseApiView
from apps.core.errors import NotFound
from apps.jobs.models import Batch


class BatchSerializer(serializers.ModelSerializer):
    is_terminal = serializers.BooleanField(read_only=True)

    class Meta:
        model = Batch
        fields = [
            'id',
            'domain',
            'kind',
            'origin',
            'state',
            'total_items',
            'processed_items',
            'failed_items',
            'quota_consumed',
            'started_at',
            'finished_at',
            'summary',
            'is_terminal',
            'created_at',
        ]


class BatchDetailView(BaseApiView):
    @extend_schema(responses=BatchSerializer, tags=['batches'])
    def get(self, request, batch_id):
        batch = Batch.objects.filter(id=batch_id).first()
        if batch is None:
            raise NotFound('Ese lote no existe en esta cuenta.')
        return Response(BatchSerializer(batch).data)


class DomainBatchListView(BaseApiView):
    @extend_schema(responses=BatchSerializer(many=True), tags=['batches'])
    def get(self, request, domain_id):
        from apps.domains.api import company_domain_or_error

        domain = company_domain_or_error(domain_id)
        return Response(BatchSerializer(domain.batches.all()[:50], many=True).data)
