from django.core.management import call_command
from django.test import TestCase
from django.urls import reverse
from .models import AyurvedaVendorListing, Deal


class ApiTests(TestCase):
    @classmethod
    def setUpTestData(cls):
        call_command('seed_data', verbosity=0)

    def test_health_and_deal_list(self):
        self.assertEqual(self.client.get(reverse('health'), secure=True).status_code, 200)
        response = self.client.get(reverse('deals'), secure=True)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.json()['count'], 5)

    def test_booking_creation(self):
        deal = Deal.objects.first()
        response = self.client.post(reverse('booking-create'), {
            'deal': deal.id, 'name': 'Test User', 'email': 'test@example.com',
            'phone': '9999999999', 'preferred_date': '2026-08-01', 'notes': ''
        }, secure=True)
        self.assertEqual(response.status_code, 201)

    def test_cms_content_endpoints(self):
        self.assertEqual(self.client.get(reverse('site-settings'), secure=True).status_code, 200)
        navigation = self.client.get(reverse('navigation'), secure=True)
        self.assertEqual(navigation.status_code, 200)
        self.assertEqual(len(navigation.json()), 7)
        page = self.client.get(reverse('page-detail', kwargs={'slug': 'dental'}), secure=True)
        self.assertEqual(page.status_code, 200)
        self.assertEqual(page.json()['title'], 'Dental Treatments')
        self.assertGreaterEqual(len(page.json()['sections']), 1)

    def test_ayurveda_vendor_submission_and_quality_ranking(self):
        submission = self.client.post(reverse('ayurveda-vendors'), {
            'company_name': 'Veda Co', 'category': 'ayurveda', 'contact_name': 'Owner', 'email': 'owner@example.com',
            'phone': '9999999999', 'city': 'Kochi', 'listing_type': 'product',
            'title': 'Herbal Oil', 'description': 'Traditional massage oil', 'price': '499.00'
        }, secure=True)
        self.assertEqual(submission.status_code, 201)
        listing = AyurvedaVendorListing.objects.get()
        self.assertEqual(listing.status, 'pending')
        self.assertNotIn('email', submission.json())
        listing.status = 'approved'; listing.quality_rating = 4.8; listing.save()
        public = self.client.get(reverse('ayurveda-vendors'), secure=True)
        self.assertEqual(public.status_code, 200)
        self.assertEqual(public.json()[0]['company_name'], 'Veda Co')
        dental = AyurvedaVendorListing.objects.create(company_name='Dental Co', category='dental', contact_name='Owner', email='dental@example.com', phone='8888888888', city='Kochi', listing_type='service', title='Dental Service', description='A quality dental service', price=999, status='approved', quality_rating=4.9)
        filtered = self.client.get(reverse('ayurveda-vendors') + '?category=dental', secure=True)
        self.assertEqual([item['id'] for item in filtered.json()], [dental.id])

# Create your tests here.
