from django.shortcuts import get_object_or_404
from drf_spectacular.utils import OpenApiExample, extend_schema
from rest_framework import status
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework.views import APIView

from .models import Structure
from .serializers_invoice_settings import StructureInvoiceSettingsSerializer


@extend_schema(
    tags=["Structure Invoicing"],
    examples=[
        OpenApiExample(
            "Patch Invoice Settings",
            value={
                "invoicing_enabled": True,
                "receipt_prefix": "REC-GHM",
                "invoice_prefix": "INV-GHM",
                "default_vat_rate": "10.00",
            },
            request_only=True,
        )
    ],
)
class StructureInvoiceSettingsAPIView(APIView):
    permission_classes = [IsAuthenticated]

    def get_object(self, structure_id, user):
        return get_object_or_404(Structure, id=structure_id, user=user)

    def get(self, request, structure_id):
        structure = self.get_object(structure_id, request.user)
        return Response(StructureInvoiceSettingsSerializer(structure).data)

    def patch(self, request, structure_id):
        structure = self.get_object(structure_id, request.user)
        serializer = StructureInvoiceSettingsSerializer(
            structure,
            data=request.data,
            partial=True,
        )
        serializer.is_valid(raise_exception=True)
        serializer.save()
        return Response(serializer.data, status=status.HTTP_200_OK)
