from django.db import models
from django.contrib.auth.models import User
from django.utils import timezone


class Service(models.Model):
    """服务类别"""
    name = models.CharField(max_length=100, verbose_name='服务名称')
    description = models.TextField(verbose_name='服务描述')
    icon = models.CharField(max_length=50, verbose_name='图标类名', blank=True)
    image = models.ImageField(upload_to='services/', blank=True, null=True, verbose_name='服务图片')
    is_active = models.BooleanField(default=True, verbose_name='是否启用')
    order = models.IntegerField(default=0, verbose_name='排序')
    created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')

    class Meta:
        verbose_name = '服务项目'
        verbose_name_plural = '服务项目'
        ordering = ['order', '-created_at']

    def __str__(self):
        return self.name


class ProductCategory(models.Model):
    """产品分类"""
    name = models.CharField(max_length=100, verbose_name='分类名称')
    parent = models.ForeignKey('self', on_delete=models.CASCADE, null=True, blank=True,
                               related_name='children', verbose_name='父级分类')
    order = models.IntegerField(default=0, verbose_name='排序')

    class Meta:
        verbose_name = '产品分类'
        verbose_name_plural = '产品分类'
        ordering = ['order']

    def __str__(self):
        return self.name


class Product(models.Model):
    """产品/配件"""
    category = models.ForeignKey(ProductCategory, on_delete=models.CASCADE,
                                 related_name='products', verbose_name='分类')
    name = models.CharField(max_length=200, verbose_name='产品名称')
    model = models.CharField(max_length=100, verbose_name='型号', blank=True)
    brand = models.CharField(max_length=100, verbose_name='品牌', blank=True)
    specifications = models.TextField(verbose_name='规格参数', blank=True)
    unit = models.CharField(max_length=20, verbose_name='单位', default='个')
    image = models.ImageField(upload_to='products/', blank=True, null=True, verbose_name='产品图片')
    is_active = models.BooleanField(default=True, verbose_name='是否启用')
    created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
    updated_at = models.DateTimeField(auto_now=True, verbose_name='更新时间')

    class Meta:
        verbose_name = '产品'
        verbose_name_plural = '产品'
        ordering = ['-created_at']

    def __str__(self):
        return f"{self.brand} {self.name} {self.model}"


class PriceRecord(models.Model):
    """价格记录"""
    PLATFORM_CHOICES = [
        ('jd', '京东'),
        ('taobao', '淘宝'),
        ('tmall', '天猫'),
        ('manual', '手动录入'),
    ]

    product = models.ForeignKey(Product, on_delete=models.CASCADE,
                                related_name='price_records', verbose_name='产品')
    platform = models.CharField(max_length=20, choices=PLATFORM_CHOICES, verbose_name='平台')
    price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='价格')
    url = models.URLField(blank=True, verbose_name='商品链接')
    supplier = models.CharField(max_length=200, verbose_name='供应商', blank=True)
    remark = models.TextField(blank=True, verbose_name='备注')
    is_valid = models.BooleanField(default=True, verbose_name='是否有效')
    fetched_at = models.DateTimeField(default=timezone.now, verbose_name='获取时间')
    created_by = models.ForeignKey(User, on_delete=models.SET_NULL, null=True,
                                   verbose_name='创建人')

    class Meta:
        verbose_name = '价格记录'
        verbose_name_plural = '价格记录'
        ordering = ['-fetched_at']

    def __str__(self):
        return f"{self.product.name} - {self.price}元 ({self.platform})"


class Customer(models.Model):
    """客户"""
    name = models.CharField(max_length=200, verbose_name='客户名称')
    contact_person = models.CharField(max_length=100, verbose_name='联系人')
    phone = models.CharField(max_length=20, verbose_name='联系电话')
    email = models.EmailField(blank=True, verbose_name='邮箱')
    address = models.TextField(blank=True, verbose_name='地址')
    company_info = models.TextField(blank=True, verbose_name='公司信息')
    created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')

    class Meta:
        verbose_name = '客户'
        verbose_name_plural = '客户'
        ordering = ['-created_at']

    def __str__(self):
        return self.name


class Quotation(models.Model):
    """报价单"""
    STATUS_CHOICES = [
        ('draft', '草稿'),
        ('pending', '待审核'),
        ('approved', '已审核'),
        ('sent', '已发送'),
        ('accepted', '已接受'),
        ('rejected', '已拒绝'),
    ]

    quotation_no = models.CharField(max_length=50, unique=True, verbose_name='报价单号')
    customer = models.ForeignKey(Customer, on_delete=models.CASCADE,
                                 related_name='quotations', verbose_name='客户')
    title = models.CharField(max_length=200, verbose_name='报价单标题')
    status = models.CharField(max_length=20, choices=STATUS_CHOICES,
                              default='draft', verbose_name='状态')
    valid_days = models.IntegerField(default=30, verbose_name='有效期(天)')
    discount_rate = models.DecimalField(max_digits=5, decimal_places=2,
                                        default=0, verbose_name='折扣率(%)')
    tax_rate = models.DecimalField(max_digits=5, decimal_places=2,
                                   default=13, verbose_name='税率(%)')
    total_amount = models.DecimalField(max_digits=12, decimal_places=2,
                                       default=0, verbose_name='总金额')
    remark = models.TextField(blank=True, verbose_name='备注')
    created_by = models.ForeignKey(User, on_delete=models.SET_NULL, null=True,
                                   verbose_name='创建人')
    created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
    updated_at = models.DateTimeField(auto_now=True, verbose_name='更新时间')

    class Meta:
        verbose_name = '报价单'
        verbose_name_plural = '报价单'
        ordering = ['-created_at']

    def __str__(self):
        return f"{self.quotation_no} - {self.customer.name}"

    def save(self, *args, **kwargs):
        if not self.quotation_no:
            # 生成报价单号
            from datetime import datetime
            prefix = datetime.now().strftime('QT%Y%m%d')
            last_quotation = Quotation.objects.filter(
                quotation_no__startswith=prefix
            ).order_by('-quotation_no').first()

            if last_quotation:
                last_number = int(last_quotation.quotation_no[-4:])
                new_number = last_number + 1
            else:
                new_number = 1

            self.quotation_no = f"{prefix}{new_number:04d}"

        super().save(*args, **kwargs)


class QuotationItem(models.Model):
    """报价单明细"""
    quotation = models.ForeignKey(Quotation, on_delete=models.CASCADE,
                                  related_name='items', verbose_name='报价单')
    product = models.ForeignKey(Product, on_delete=models.CASCADE, verbose_name='产品')
    quantity = models.IntegerField(default=1, verbose_name='数量')
    unit_price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='单价')
    discount_rate = models.DecimalField(max_digits=5, decimal_places=2,
                                        default=0, verbose_name='折扣率(%)')
    subtotal = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='小计')
    remark = models.CharField(max_length=500, blank=True, verbose_name='备注')

    class Meta:
        verbose_name = '报价单明细'
        verbose_name_plural = '报价单明细'

    def __str__(self):
        return f"{self.product.name} x {self.quantity}"

    def save(self, *args, **kwargs):
        # 计算小计
        discount_amount = self.unit_price * self.quantity * (self.discount_rate / 100)
        self.subtotal = self.unit_price * self.quantity - discount_amount
        super().save(*args, **kwargs)


class CompanyInfo(models.Model):
    """公司信息"""
    name = models.CharField(max_length=200, verbose_name='公司名称')
    slogan = models.CharField(max_length=500, verbose_name='公司口号', blank=True)
    description = models.TextField(verbose_name='公司简介')
    address = models.CharField(max_length=500, verbose_name='公司地址')
    phone = models.CharField(max_length=50, verbose_name='联系电话')
    mobile = models.CharField(max_length=50, verbose_name='手机号码', blank=True)
    email = models.EmailField(verbose_name='邮箱')
    website = models.URLField(verbose_name='网站', blank=True)
    wechat = models.CharField(max_length=100, verbose_name='微信号', blank=True)
    qq = models.CharField(max_length=20, verbose_name='QQ号', blank=True)
    logo = models.ImageField(upload_to='company/', verbose_name='公司Logo', blank=True)
    qr_code = models.ImageField(upload_to='company/', verbose_name='二维码', blank=True)
    business_license = models.CharField(max_length=100, verbose_name='营业执照号', blank=True)
    bank_name = models.CharField(max_length=200, verbose_name='开户银行', blank=True)
    bank_account = models.CharField(max_length=100, verbose_name='银行账号', blank=True)

    class Meta:
        verbose_name = '公司信息'
        verbose_name_plural = '公司信息'

    def __str__(self):
        return self.name


class ContactMessage(models.Model):
    """联系留言"""
    name = models.CharField(max_length=100, verbose_name='姓名')
    phone = models.CharField(max_length=20, verbose_name='电话')
    email = models.EmailField(verbose_name='邮箱', blank=True)
    subject = models.CharField(max_length=200, verbose_name='主题')
    message = models.TextField(verbose_name='留言内容')
    is_read = models.BooleanField(default=False, verbose_name='是否已读')
    is_replied = models.BooleanField(default=False, verbose_name='是否已回复')
    created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')

    class Meta:
        verbose_name = '联系留言'
        verbose_name_plural = '联系留言'
        ordering = ['-created_at']

    def __str__(self):
        return f"{self.name} - {self.subject}"


class PlatformCookie(models.Model):
    """平台Cookie管理"""
    PLATFORM_CHOICES = [
        ('jd', '京东'),
        ('taobao', '淘宝'),
        ('tmall', '天猫'),
        ('other', '其他'),
    ]
    
    platform = models.CharField(max_length=20, choices=PLATFORM_CHOICES, verbose_name='平台')
    cookie_data = models.TextField(verbose_name='Cookie数据')
    description = models.CharField(max_length=200, verbose_name='描述', blank=True)
    is_active = models.BooleanField(default=True, verbose_name='是否启用')
    last_used = models.DateTimeField(null=True, blank=True, verbose_name='最后使用时间')
    created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
    updated_at = models.DateTimeField(auto_now=True, verbose_name='更新时间')
    created_by = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='创建人')

    class Meta:
        verbose_name = '平台Cookie'
        verbose_name_plural = '平台Cookie'
        ordering = ['-updated_at']

    def __str__(self):
        return f"{self.get_platform_display()} - {self.description or '无描述'}"
    
    def get_cookie_dict(self):
        """将Cookie字符串转换为字典"""
        cookie_dict = {}
        if self.cookie_data:
            for item in self.cookie_data.split(';'):
                item = item.strip()
                if '=' in item:
                    key, value = item.split('=', 1)
                    cookie_dict[key.strip()] = value.strip()
        return cookie_dict