from django.db import models
from django.utils.text import slugify
from ckeditor_uploader.fields import RichTextUploadingField
from django.conf import settings

class StudyDestination(models.Model):
    name = models.CharField(max_length=100, unique=True, help_text="e.g. USA, UK, Canada, Mauritius")
    slug = models.SlugField(max_length=120, unique=True, blank=True)
    banner_image = models.ImageField(upload_to='study/destinations/')
    short_intro = models.TextField(help_text="Why study here? Brief intro.")
    detailed_guide = RichTextUploadingField(blank=True, help_text="Visa rules, living costs, culture.")
    
    # Fast Facts
    average_living_cost = models.CharField(max_length=100, blank=True, help_text="e.g. $10,000 - $15,000 / year")
    post_study_work_visa = models.CharField(max_length=100, blank=True, help_text="e.g. Up to 3 years")
    is_active = models.BooleanField(default=True)

    # 🚀 SEO Fields
    meta_title = models.CharField(max_length=255, blank=True)
    meta_description = models.TextField(max_length=255, blank=True)
    meta_keywords = models.CharField(max_length=255, blank=True)

    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(self.name)
        super().save(*args, **kwargs)

    def __str__(self):
        return self.name

class Program(models.Model):
    LEVEL_CHOICES = [
        ('UG', 'Undergraduate (Bachelors)'),
        ('PG', 'Postgraduate (Masters)'),
        ('PHD', 'Doctorate (PhD)'),
        ('DIP', 'Diploma / Certificate'),
    ]
    
    # ✅ FIX: Direct connection to Country (Destination). University model removed.
    destination = models.ForeignKey(StudyDestination, on_delete=models.CASCADE, related_name='programs', null=True)
    
    name = models.CharField(max_length=255, help_text="e.g. BBA, Hotel Management, Tourism")
    slug = models.SlugField(max_length=255, unique=True, blank=True)
    
    # 🤫 Secret Field for Yash Babu (Never sent to frontend)
    internal_institute_name = models.CharField(
        max_length=255, 
        blank=True, 
        help_text="Secret: Asli university/college ka naam yahan likhein (Sirf Admin dekhega)"
    )
    
    level = models.CharField(max_length=50, choices=LEVEL_CHOICES)
    duration = models.CharField(max_length=100, help_text="e.g. 2 Years, 18 Months")
    tuition_fee = models.CharField(max_length=100, help_text="e.g. $4080 USD / year")
    application_deadline = models.CharField(max_length=100, blank=True, help_text="e.g. Fall (Sep) / Spring (Jan)")
    
    # Requirements
    ielts_requirement = models.CharField(max_length=100, blank=True, help_text="e.g. Overall 6.5, or Not Required")
    academic_requirement = models.TextField(blank=True, help_text="e.g. Minimum 60% in 12th")
    
    # ✅ NAYA: Inclusions & Exclusions
    inclusions = models.TextField(blank=True, help_text="Comma se alag karein. e.g. Flight, Tuition Fee, 1 month hostel")
    exclusions = models.TextField(blank=True, help_text="Comma se alag karein. e.g. Food, Personal Expenses")
    
    description = RichTextUploadingField(blank=True)
    is_active = models.BooleanField(default=True)

    # 🚀 SEO Fields
    meta_title = models.CharField(max_length=255, blank=True)
    meta_description = models.TextField(max_length=255, blank=True)
    meta_keywords = models.CharField(max_length=255, blank=True)

    def save(self, *args, **kwargs):
        if not self.slug:
            # Slug generation without university name
            self.slug = slugify(f"{self.name} in {self.destination.name}")
        super().save(*args, **kwargs)

    def __str__(self):
        return f"{self.name} in {self.destination.name}"

class StudentCounselingLead(models.Model):
    STATUS_CHOICES = [
        ('new', 'New Inquiry'),
        ('contacted', 'Contacted'),
        ('document_collection', 'Document Collection'),
        ('applied', 'Application Submitted'),
        ('visa_process', 'Visa Processing'),
        ('enrolled', 'Successfully Enrolled'),
        ('dropped', 'Dropped'),
    ]

    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, null=True, blank=True)
    student_name = models.CharField(max_length=150)
    email = models.EmailField()
    phone = models.CharField(max_length=20)
    
    # Academic Profile
    highest_education = models.CharField(max_length=100, blank=True)
    passing_year = models.CharField(max_length=4, blank=True)
    academic_score = models.CharField(max_length=50, blank=True)
    english_test_score = models.CharField(max_length=100, blank=True)
    
    # Target
    preferred_country = models.ForeignKey(StudyDestination, on_delete=models.SET_NULL, null=True, blank=True)
    preferred_course = models.CharField(max_length=200, blank=True)
    
    message = models.TextField(blank=True)
    status = models.CharField(max_length=30, choices=STATUS_CHOICES, default='new')
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f"Lead: {self.student_name} for {self.preferred_country}"
        
class StudyBlog(models.Model):
    CATEGORY_CHOICES = [
        ('visa', 'Visa & Immigration'),
        ('scholarship', 'Scholarships & Fees'),
        ('university', 'University Reviews'),
        ('preparation', 'Exam Prep (IELTS/TOEFL)'),
        ('career', 'Post-Study Career'),
    ]

    title = models.CharField(max_length=255)
    slug = models.SlugField(max_length=255, unique=True, blank=True)
    category = models.CharField(max_length=50, choices=CATEGORY_CHOICES, default='visa')
    author = models.CharField(max_length=100, default="Videsh Chalo Expert")
    
    # Destination link (Optional) so we can show related blogs on country pages later
    related_destination = models.ForeignKey(StudyDestination, on_delete=models.SET_NULL, null=True, blank=True, related_name='study_blogs')
    
    featured_image = models.ImageField(upload_to='study/blogs/')
    content = RichTextUploadingField()
    short_summary = models.TextField(max_length=300, help_text="Bahar card par dikhane ke liye 2-3 line ki summary")
    reading_time = models.PositiveIntegerField(default=5, help_text="Reading time in minutes")
    
    is_published = models.BooleanField(default=True)
    views_count = models.PositiveIntegerField(default=0)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    # 🚀 SEO Fields
    meta_title = models.CharField(max_length=255, blank=True)
    meta_description = models.TextField(max_length=255, blank=True)
    meta_keywords = models.CharField(max_length=255, blank=True)

    class Meta:
        verbose_name = "Study Guide/Blog"
        verbose_name_plural = "Study Guides & Blogs"
        ordering = ['-created_at']

    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(self.title)
        super().save(*args, **kwargs)

    def __str__(self):
        return self.title