from django.test import TestCase, Client
import json
from unittest.mock import patch
from core.models import CategoryReference

class AIExtractorTests(TestCase):
    def setUp(self):
        # Create some baseline category references for our mock db
        CategoryReference.objects.create(category_type="income", phrase="salary received")
        CategoryReference.objects.create(category_type="income", phrase="paisy aaye")
        CategoryReference.objects.create(category_type="expense", phrase="rent paid")
        self.client = Client()

    @patch('core.services.ai_extractor.AIExtractorService')
    def test_extract_statement_api(self, MockService):
        # Mock the service response to avoid loading Heavy ML models during CI/CD
        instance = MockService.return_value
        instance.process_statement.return_value = {
            "statement": "paisy aaye meezan bank mein",
            "category": "income",
            "confidence": 0.95,
            "source_account": "Cash",
            "target_account": "meezan bank",
            "extracted_entities": ["meezan bank"]
        }

        response = self.client.post(
            '/api/extract/',
            data=json.dumps({"statement": "paisy aaye meezan bank mein"}),
            content_type='application/json'
        )
        
        self.assertEqual(response.status_code, 200)
        response_data = response.json()
        self.assertEqual(response_data["status"], "success")
        self.assertEqual(response_data["data"]["category"], "income")
        self.assertEqual(response_data["data"]["target_account"], "meezan bank")
