from rest_framework.generics import ListAPIView, RetrieveAPIView
from rest_framework.schemas.openapi import AutoSchema

from ram.views import CustomLimitOffsetPagination
from bookshelf.models import Book, Catalog
from bookshelf.serializers import BookSerializer, CatalogSerializer


class BookList(ListAPIView):
    serializer_class = BookSerializer
    pagination_class = CustomLimitOffsetPagination

    def get_queryset(self):
        return Book.objects.get_published(self.request.user)


class BookGet(RetrieveAPIView):
    serializer_class = BookSerializer
    lookup_field = "uuid"
    schema = AutoSchema(operation_id_base="retrieveBookByUUID")

    def get_queryset(self):
        return Book.objects.get_published(self.request.user)


class CatalogList(ListAPIView):
    serializer_class = CatalogSerializer
    pagination_class = CustomLimitOffsetPagination

    def get_queryset(self):
        return Catalog.objects.get_published(self.request.user)


class CatalogGet(RetrieveAPIView):
    serializer_class = CatalogSerializer
    lookup_field = "uuid"
    schema = AutoSchema(operation_id_base="retrieveCatalogByUUID")

    def get_queryset(self):
        return Book.objects.get_published(self.request.user)

# FIXME: add Magazine and MagazineIssue views
