from django.db import models
from django.core.cache import cache


class SiteSetting(models.Model):
    """Singleton site-wide settings editable from admin."""
    site_name = models.CharField(max_length=120, default='TDK Homes')
    tagline = models.CharField(max_length=255, default='Your trusted real estate partner')
    hero_title = models.CharField(max_length=255, default='Find Your Dream Home in Nigeria')
    hero_subtitle = models.CharField(max_length=500, default='Premium properties, lands, and investment opportunities')
    hero_image = models.ImageField(upload_to='site/', blank=True, null=True)
    hero_video = models.FileField(upload_to='site/videos/', blank=True, null=True,
                                   help_text='MP4 recommended. Used as hero background video.')

    about_short = models.TextField(blank=True, default='TDK Homes is a leading real estate company in Nigeria.')

    # Contact
    phone = models.CharField(max_length=30, default='+234 (0) 816-553-5147')
    phone_secondary = models.CharField(max_length=30, blank=True, help_text='Second number shown in the utility bar (e.g. WhatsApp line)')
    email = models.EmailField(default='info@tdkhomes.ng')
    whatsapp_number = models.CharField(max_length=20, default='2348165535147', help_text='Without + sign')
    address = models.CharField(max_length=255, default='Abuja, Nigeria')

    # Social
    facebook = models.URLField(blank=True)
    instagram = models.URLField(blank=True)
    twitter = models.URLField(blank=True)
    linkedin = models.URLField(blank=True)
    youtube = models.URLField(blank=True)
    tiktok = models.URLField(blank=True)

    # Trust indicators
    clients_count = models.PositiveIntegerField(default=500)
    properties_sold = models.PositiveIntegerField(default=200)
    years_experience = models.PositiveIntegerField(default=10)
    locations_covered = models.PositiveIntegerField(default=15)

    # Exit-intent popup
    popup_enabled = models.BooleanField(default=True)
    popup_title = models.CharField(max_length=200, default='Wait! Get Our Exclusive Property List')
    popup_subtitle = models.CharField(max_length=500, default='Subscribe to receive vetted property deals before anyone else.')
    popup_cta = models.CharField(max_length=50, default='Send Me Deals')

    # Chatbot
    chatbot_enabled = models.BooleanField(default=True)
    chatbot_name = models.CharField(max_length=50, default='TDK Assistant')
    chatbot_greeting = models.CharField(max_length=500, default='Hi! I am the TDK Homes assistant. Ask me about properties, lands, or any of our services.')

    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        verbose_name = 'Site Settings'
        verbose_name_plural = 'Site Settings'

    def __str__(self):
        return self.site_name

    def save(self, *args, **kwargs):
        # Singleton enforcement
        self.pk = 1
        super().save(*args, **kwargs)
        cache.delete('site_settings')

    @classmethod
    def get(cls):
        cached = cache.get('site_settings')
        if cached:
            return cached
        obj, _ = cls.objects.get_or_create(pk=1)
        cache.set('site_settings', obj, 300)
        return obj


class Testimonial(models.Model):
    name = models.CharField(max_length=120)
    role = models.CharField(max_length=120, blank=True, help_text='e.g. Homeowner, Investor')
    photo = models.ImageField(upload_to='testimonials/', blank=True, null=True)
    quote = models.TextField()
    rating = models.PositiveSmallIntegerField(default=5)
    is_published = models.BooleanField(default=True)
    order = models.PositiveIntegerField(default=0)
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ['order', '-created_at']

    def __str__(self):
        return f"{self.name} ({self.rating}★)"


class FAQ(models.Model):
    question = models.CharField(max_length=255)
    answer = models.TextField()
    category = models.CharField(max_length=80, blank=True)
    order = models.PositiveIntegerField(default=0)
    is_published = models.BooleanField(default=True)

    class Meta:
        ordering = ['order', 'question']
        verbose_name = 'FAQ'
        verbose_name_plural = 'FAQs'

    def __str__(self):
        return self.question


class TeamMember(models.Model):
    name = models.CharField(max_length=120)
    role = models.CharField(max_length=120)
    photo = models.ImageField(upload_to='team/', blank=True, null=True)
    bio = models.TextField(blank=True)
    phone = models.CharField(max_length=30, blank=True)
    email = models.EmailField(blank=True)
    order = models.PositiveIntegerField(default=0)
    is_active = models.BooleanField(default=True)

    class Meta:
        ordering = ['order', 'name']

    def __str__(self):
        return f"{self.name} — {self.role}"
