from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework.views import APIView

from accounts.permissions import IsManager

from . import services


class BaseReportView(APIView):
    permission_classes = [IsManager]


class DashboardView(BaseReportView):
    def get(self, request):
        return Response(services.dashboard_report())


class MyDashboardView(APIView):
    """Seller-facing dashboard: their own sales only, no business-wide profit."""

    permission_classes = [IsAuthenticated]

    def get(self, request):
        return Response(services.my_dashboard_report(request.user))


class SalesReportView(BaseReportView):
    def get(self, request):
        from_date, to_date = services.resolve_date_range(request)
        return Response(services.sales_report(from_date, to_date))


class ProfitReportView(BaseReportView):
    def get(self, request):
        from_date, to_date = services.resolve_date_range(request)
        return Response(services.profit_report(from_date, to_date))


class InventoryReportView(BaseReportView):
    def get(self, request):
        return Response(services.inventory_report())


class TopSellingReportView(BaseReportView):
    def get(self, request):
        from_date, to_date = services.resolve_date_range(request)
        return Response(services.top_selling_report(from_date, to_date))
