from rest_framework.views import APIView from rest_framework.response import Response from rest_framework import status, permissions from .services import forecast_income from .anomaly import get_anomalies from .forecast import get_forecast from finance.utils_mongo import get_user_db_id class IncomeForecastView(APIView): permission_classes = [permissions.IsAuthenticated] def get(self, request): try: days = int(request.query_params.get('days', 30)) data = forecast_income(get_user_db_id(request.user), days) return Response(data) except Exception as e: return Response({"error": str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) class AnomalyListView(APIView): permission_classes = [permissions.IsAuthenticated] def get(self, request): try: return Response(get_anomalies(get_user_db_id(request.user))) except Exception as e: return Response({"error": str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) class ForecastView(APIView): permission_classes = [permissions.IsAuthenticated] def get(self, request): try: # Accurate AI-based forecasting (Chronos Bolt + Statistical Fallback) data = get_forecast(get_user_db_id(request.user)) if data is None: return Response({"error": "Insufficient data for AI forecast (need >5 days history)"}, status=status.HTTP_400_BAD_REQUEST) return Response(data) except Exception as e: return Response({"error": str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)