from django.db import models
from django.urls import reverse
from django.utils.text import slugify
from ckeditor.fields import RichTextField


class TimeStampedModel(models.Model):
    created = models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ایجاد')
    updated = models.DateTimeField(auto_now=True, verbose_name='تاریخ بروزرسانی')

    class Meta:
        abstract = True


class SiteSetting(TimeStampedModel):
    """Global site settings for SEO and branding"""
    site_name = models.CharField(max_length=200, verbose_name='نام سایت')
    site_title = models.CharField(max_length=200, verbose_name='عنوان سایت')
    site_description = models.TextField(verbose_name='توضیحات سایت')
    site_keywords = models.TextField(verbose_name='کلمات کلیدی', help_text='با کاما جدا کنید')
    site_url = models.URLField(verbose_name='آدرس سایت')
    phone = models.CharField(max_length=20, verbose_name='تلفن')
    email = models.EmailField(verbose_name='ایمیل')
    address = models.TextField(verbose_name='آدرس')
    work_hours = models.CharField(max_length=200, verbose_name='ساعات کاری')

    # Social Media
    instagram = models.URLField(blank=True, verbose_name='اینستاگرام')
    telegram = models.URLField(blank=True, verbose_name='تلگرام')
    whatsapp = models.CharField(max_length=20, blank=True, verbose_name='واتساپ')

    # Doctor Info
    doctor_name = models.CharField(max_length=200, verbose_name='نام دکتر')
    doctor_title = models.CharField(max_length=200, verbose_name='عنوان تخصصی')
    doctor_bio = RichTextField(verbose_name='بیوگرافی دکتر')
    doctor_image = models.ImageField(upload_to='doctor/', verbose_name='تصویر دکتر')
    doctor_experience_years = models.PositiveIntegerField(default=15, verbose_name='سال تجربه')

    # SEO
    google_analytics_id = models.CharField(max_length=50, blank=True, verbose_name='Google Analytics ID')
    google_tag_manager = models.CharField(max_length=50, blank=True, verbose_name='Google Tag Manager')

    is_active = models.BooleanField(default=True, verbose_name='فعال')

    class Meta:
        verbose_name = 'تنظیمات سایت'
        verbose_name_plural = 'تنظیمات سایت'

    def __str__(self):
        return self.site_name

    def save(self, *args, **kwargs):
        if self.is_active:
            SiteSetting.objects.filter(is_active=True).update(is_active=False)
        super().save(*args, **kwargs)


class Service(TimeStampedModel):
    """Medical Services with SEO optimization"""
    title = models.CharField(max_length=200, verbose_name='عنوان خدمت')
    slug = models.SlugField(unique=True, verbose_name='اسلاگ')
    icon = models.CharField(max_length=100, verbose_name='آیکون', help_text='کلاس آیکون یا SVG')
    short_description = models.TextField(verbose_name='توضیح کوتاه')
    full_description = RichTextField(verbose_name='توضیح کامل')
    image = models.ImageField(upload_to='services/', blank=True, verbose_name='تصویر')
    meta_title = models.CharField(max_length=200, blank=True, verbose_name='متا عنوان')
    meta_description = models.TextField(blank=True, verbose_name='متا توضیحات')
    meta_keywords = models.TextField(blank=True, verbose_name='متا کلمات کلیدی')
    order = models.PositiveIntegerField(default=0, verbose_name='ترتیب نمایش')
    is_active = models.BooleanField(default=True, verbose_name='فعال')

    class Meta:
        ordering = ['order', '-created']
        verbose_name = 'خدمت'
        verbose_name_plural = 'خدمات'

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('service_detail', kwargs={'slug': self.slug})

    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(self.title)
        if not self.meta_title:
            self.meta_title = self.title
        if not self.meta_description:
            self.meta_description = self.short_description[:160]
        super().save(*args, **kwargs)


class Article(TimeStampedModel):
    """SEO optimized articles for AEO and content marketing"""
    title = models.CharField(max_length=200, verbose_name='عنوان مقاله')
    slug = models.SlugField(unique=True, verbose_name='اسلاگ')
    category = models.CharField(max_length=100, verbose_name='دسته‌بندی')
    summary = models.TextField(verbose_name='خلاصه')
    content = RichTextField(verbose_name='محتوا')
    image = models.ImageField(upload_to='articles/', verbose_name='تصویر شاخص')

    # SEO Fields
    meta_title = models.CharField(max_length=200, blank=True, verbose_name='متا عنوان')
    meta_description = models.TextField(blank=True, verbose_name='متا توضیحات')
    meta_keywords = models.TextField(blank=True, verbose_name='متا کلمات کلیدی')
    canonical_url = models.URLField(blank=True, verbose_name='آدرس کانونیکال')

    # AEO Fields
    faq_schema = models.JSONField(default=dict, blank=True, verbose_name='اسکیمای سوالات متداول')
    is_faq = models.BooleanField(default=False, verbose_name='صفحه سوالات متداول')

    # Engagement
    views = models.PositiveIntegerField(default=0, verbose_name='تعداد بازدید')
    is_published = models.BooleanField(default=True, verbose_name='منتشر شده')
    is_featured = models.BooleanField(default=False, verbose_name='ویژه')
    published_at = models.DateTimeField(null=True, blank=True, verbose_name='تاریخ انتشار')

    class Meta:
        ordering = ['-published_at', '-created']
        verbose_name = 'مقاله'
        verbose_name_plural = 'مقالات'
        indexes = [
            models.Index(fields=['slug']),
            models.Index(fields=['is_published', '-published_at']),
            models.Index(fields=['category']),
        ]

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('article_detail', kwargs={'slug': self.slug})

    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(self.title)
        if not self.meta_title:
            self.meta_title = self.title
        if not self.meta_description:
            self.meta_description = self.summary[:160]
        if not self.published_at and self.is_published:
            from django.utils import timezone
            self.published_at = timezone.now()
        super().save(*args, **kwargs)


class FAQ(TimeStampedModel):
    """FAQ for AEO (Answer Engine Optimization)"""
    question = models.CharField(max_length=500, verbose_name='سوال')
    answer = RichTextField(verbose_name='پاسخ')
    category = models.CharField(max_length=100, verbose_name='دسته‌بندی')
    order = models.PositiveIntegerField(default=0, verbose_name='ترتیب')
    is_active = models.BooleanField(default=True, verbose_name='فعال')

    class Meta:
        ordering = ['order', 'created']
        verbose_name = 'سوال متداول'
        verbose_name_plural = 'سوالات متداول'

    def __str__(self):
        return self.question


class Testimonial(TimeStampedModel):
    """Patient testimonials"""
    name = models.CharField(max_length=200, verbose_name='نام بیمار')
    title = models.CharField(max_length=200, blank=True, verbose_name='عنوان')
    content = models.TextField(verbose_name='نظر')
    rating = models.PositiveSmallIntegerField(default=5, verbose_name='امتیاز')
    is_active = models.BooleanField(default=True, verbose_name='فعال')

    class Meta:
        verbose_name = 'نظر بیمار'
        verbose_name_plural = 'نظرات بیماران'

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


class ContactMessage(TimeStampedModel):
    """Secure contact form messages"""
    name = models.CharField(max_length=200, verbose_name='نام')
    phone = models.CharField(max_length=20, verbose_name='تلفن')
    email = models.EmailField(blank=True, verbose_name='ایمیل')
    subject = models.CharField(max_length=200, verbose_name='موضوع')
    message = models.TextField(verbose_name='پیام')
    is_read = models.BooleanField(default=False, verbose_name='خوانده شده')
    ip_address = models.GenericIPAddressField(null=True, blank=True, verbose_name='آی‌پی')
    user_agent = models.TextField(blank=True, verbose_name='مرورگر')

    class Meta:
        ordering = ['-created']
        verbose_name = 'پیام تماس'
        verbose_name_plural = 'پیام‌های تماس'

    def __str__(self):
        return f"{self.name} - {self.subject}"


class GalleryImage(TimeStampedModel):
    """Gallery images"""
    title = models.CharField(max_length=200, verbose_name='عنوان')
    image = models.ImageField(upload_to='gallery/', verbose_name='تصویر')
    alt_text = models.CharField(max_length=200, verbose_name='متن جایگزین (Alt)', help_text='برای SEO')
    order = models.PositiveIntegerField(default=0, verbose_name='ترتیب')
    is_active = models.BooleanField(default=True, verbose_name='فعال')

    class Meta:
        ordering = ['order', 'created']
        verbose_name = 'تصویر گالری'
        verbose_name_plural = 'گالری تصاویر'

    def __str__(self):
        return self.title
class SocialMedia(models.Model):
    PLATFORM_CHOICES = [
        ('instagram', 'اینستاگرام'),
        ('telegram', 'تلگرام'),
        ('whatsapp', 'واتساپ'),
        ('youtube', 'یوتیوب'),
        ('twitter', 'توییتر'),
    ]
    
    platform = models.CharField(max_length=20, choices=PLATFORM_CHOICES, verbose_name='شبکه اجتماعی')
    url = models.URLField(verbose_name='لینک')
    icon = models.CharField(max_length=50, default='bi bi-link', verbose_name='آیکون (کلاس Bootstrap)')
    is_active = models.BooleanField(default=True, verbose_name='فعال')
    order = models.PositiveIntegerField(default=0, verbose_name='ترتیب نمایش')
    
    class Meta:
        ordering = ['order', 'platform']
        verbose_name = 'شبکه اجتماعی'
        verbose_name_plural = 'شبکه‌های اجتماعی'
    
    def __str__(self):
        return self.get_platform_display()

    
class QuickContact(TimeStampedModel):
     """شماره تماس، واتساپ و اینستاگرام - قابل ویرایش از ادمین"""
     phone = models.CharField(max_length=20, verbose_name='شماره تماس')
     whatsapp = models.CharField(max_length=20, verbose_name='شماره واتساپ')
     instagram = models.CharField(max_length=100, verbose_name='ایدی اینستاگرام', help_text='بدون @ وارد کنید. مثال: dr_alijafari_skullbase')
     is_active = models.BooleanField(default=True, verbose_name='فعال')

class Meta:
        verbose_name = 'اطلاعات تماس سریع'
        verbose_name_plural = 'اطلاعات تماس سریع'
        def __str__(self):
         return f"تماس: {self.phone}"
