from django.db import models
from account.models import User
from order.models import OrderModel
from django_jalali.db import models as jmodels



class Attachment(models.Model):
    file = models.FileField(upload_to='attachments')
    created_at = models.DateTimeField(auto_now_add=True)
    size = models.PositiveIntegerField(null=True, blank=True)
    name = models.CharField(max_length=400, null=True, blank=True)
    uploaded_by = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
    def __str__(self):
        return self.file.name

    def save(self, *args, **kwargs):
        if self.file:
            self.size = self.file.size
            self.name = self.file.name
        super(Attachment, self).save(*args, **kwargs)

    class Meta:
        verbose_name = 'پیوست تیکت'
        verbose_name_plural = 'پیوست های تیکت'

class Ticket(models.Model):
    # objects = jmodels.jManager()
    STATUS_CHOICES = [
        ('in_progress', 'در انتظار پاسخ'),
        ('resolved', 'پاسخ داده شده'),
        ('closed', 'بسته شده'),
    ]
    CATEGORY_CHOICES = [
        ('finance_and_accounting', 'مالی و حسابداری'),
        ('user_profile', 'پروفایل کاربری'),
        ('order_tracking', 'پیگیری سفارش'),
        ('authentication', 'احراز هویت'),
        ('product', 'محصول'),
        ('bug_and_error_reporting', 'اعلام باگ و خطا در وبسایت'),
        ('other', 'سایر'),
    ]
    subject = models.CharField(max_length=255, verbose_name='موضوع')
    ticket_category = models.CharField(max_length=30, verbose_name='دسته بندی تیکت', choices=CATEGORY_CHOICES)
    customer = models.ForeignKey(User, on_delete=models.CASCADE, related_name="tickets", verbose_name='کاربر')
    admin = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True, related_name="assigned_tickets", verbose_name='ادمین')
    status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='in_progress', verbose_name='وضعیت تیکت')
    # created_at = jmodels.jDateTimeField(auto_now_add=True, verbose_name='ساخته شده در')
    # updated_at = jmodels.jDateTimeField(auto_now=True, verbose_name='اپدیت شده در')
    created_at = models.DateTimeField(auto_now_add=True, verbose_name='ساخته شده در')
    updated_at = models.DateTimeField(auto_now=True, verbose_name='اپدیت شده در')
    order = models.ForeignKey(OrderModel ,blank=True, null=True, on_delete=models.SET_NULL)

    def __str__(self):
        return self.subject


    class Meta:
        verbose_name = 'تیکت'
        verbose_name_plural = 'تیکت ها'


class Message(models.Model):
    objects = jmodels.jManager()
    ticket = models.ForeignKey(Ticket, on_delete=models.CASCADE, related_name="messages", verbose_name='تیکت')
    sender = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='ارسال کننده')
    content = models.TextField(verbose_name='محتوای پیام')
    created_at = jmodels.jDateTimeField(auto_now_add=True, verbose_name='ساخته شده در')
    attachments = models.ManyToManyField(Attachment, related_name='messages', blank=True)

    def __str__(self):
        return f"Message by {self.sender.full_name} on {self.ticket.subject}"

    class Meta:
        verbose_name = 'پیام تیکت'
        verbose_name_plural = 'پیام های تیکت'


class ContactUsModel(models.Model):
    full_name = models.CharField(max_length=50, verbose_name='نام و نام خانوادگی')
    email = models.EmailField(max_length=254, verbose_name='ایمیل')
    phone = models.CharField(max_length=30, verbose_name='شماره تماس')
    FEEDBACK_TYPES = [
        ('ORDER_FOLLOW_UP', 'پیگیری سفارش'),
        ('SUGGESTION', 'پیشنهادات'),
        ('COMPLAINT', 'انتقادات'),
    ]

    type = models.CharField(max_length=20, choices=FEEDBACK_TYPES, verbose_name='نوع')
    message = models.TextField(verbose_name='پیام')
    is_reviewed = models.BooleanField(default=False, verbose_name='بررسی شده')

    def __str__(self):
        return f'{self.full_name} - {self.message[:15]}...'
    
    class Meta:
        verbose_name = 'ارتباط با ما'
        verbose_name_plural = 'ارتباط با ما ها '