from django.db import models
from extensions.utils import jalali_converter
from user.models import User, Province, City
from django.core.validators import MinLengthValidator
from django.utils.html import format_html
import datetime
from location_field.models.plain import PlainLocationField
from core.models import Car, Product


def logo(instance, filename):
    return "logo/{}".format(filename)


def document(instance, filename):
    return "document/{}".format(filename)


class Seller(User):
    ACCOUNT_TYPE_CHOICES = (
        ('real', 'حقوقی'),
        ('legal', 'حقیقی')
    )
    phone = models.CharField(max_length=11, validators=[MinLengthValidator(11)], null=True,
                             verbose_name="شماره تلفن ثابت")
    account_type = models.CharField(max_length=20, choices=ACCOUNT_TYPE_CHOICES, null=True, verbose_name="نوع حساب")
    logo = models.ImageField(upload_to=logo, null=True, blank=True, verbose_name="تصویر لوگو")
    identifier = models.CharField(max_length=10, null=True, verbose_name="شماره شناسنامه")
    birthdate = models.CharField(max_length=10, verbose_name="تاریخ تولد")
    shop_name = models.CharField(max_length=255, null=True, unique=True, verbose_name="نام فروشگاه")
    about = models.TextField(null=True, blank=True, verbose_name="درباره فروشنده")
    bank_account_id = models.CharField(max_length=26, validators=[MinLengthValidator(26)], unique=True, null=True,
                                       verbose_name="شماره شبا")
    wallet = models.IntegerField(default=0, verbose_name="کیف پول")
    contract_start_date = models.DateTimeField(auto_now_add=True, verbose_name="تاریخ شروع قرارداد")
    car = models.ManyToManyField(Car, blank=True, related_name="seller_cars", verbose_name="خودروهای زمینه کاری")
    product = models.ManyToManyField(Product, blank=True, related_name="seller_products", verbose_name="قطعات زمینه کاری")

    class Meta:
        verbose_name = "فروشنده"
        verbose_name_plural = "فروشندگان"

    def __str__(self):
        return self.shop_name

    def jalali_birthdate(self):
        return jalali_converter(self.birthdate)

    def contract_end_date(self):
        return self.contract_start_date + datetime.timedelta(days=365)

    def jalali_contract_start_date(self):
        return jalali_converter(self.contract_start_date)

    def jalali_contract_end_date(self):
        return jalali_converter(self.contract_end_date())

    def logo_tag(self):
        if self.logo:
            return format_html("<img width=70 height=60 style='border-radius:5px;' src='{}'>".format(self.logo.url))
        return "ندارد"

    logo_tag.short_description = "لوگو"
    jalali_birthdate.short_description = "تاریخ تولد"
    jalali_birthdate.contract_end_date = "تاریخ اتمام قرارداد"


class Company(models.Model):
    COMPANY_TYPE_CHOICES = (
        ('public', 'سهامی عام'),
        ('private', 'سهامی خاص'),
        ('limited_responsibility', 'مسئولیت محدود'),
        ('cooperative', 'تعاونی'),
        ('solidarity', 'تضامنی'),
    )
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=255, null=True, verbose_name="نام شرکت")
    type = models.CharField(max_length=30, choices=COMPANY_TYPE_CHOICES, null=True, verbose_name="نوع شرکت")
    registration_number = models.CharField(max_length=255, unique=True, verbose_name="شماره ثبت")
    nationality_code = models.CharField(max_length=255, unique=True, verbose_name="شناسه ملی")
    economic_code = models.CharField(max_length=255, unique=True, verbose_name="کد اقتصادی")
    signatories = models.TextField(null=True, verbose_name="صاحبان حق امضا")
    seller = models.ForeignKey(Seller, on_delete=models.CASCADE, null=True, verbose_name="فروشنده")

    class Meta:
        verbose_name = "شرکت"
        verbose_name_plural = "اطلاعات شرکت"

    def __str__(self):
        return self.name


class Warehouse(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=256, null=True, verbose_name="نام انبار")
    province = models.ForeignKey(Province, on_delete=models.CASCADE, null=True, verbose_name="استان")
    city = models.ForeignKey(City, on_delete=models.CASCADE, null=True, verbose_name="شهر")
    province_city = models.CharField(max_length=256, default='', blank=True)
    address = models.TextField(null=True, verbose_name="آدرس")
    location = PlainLocationField(based_fields=['province_city'], default='35.6892523,51.3896004',
                                  verbose_name="لوکیشن")  # latitude, longitude
    seller = models.ForeignKey(Seller, on_delete=models.CASCADE, null=True, verbose_name="فروشنده")

    class Meta:
        verbose_name = "انبار"
        verbose_name_plural = "انبارها"

    def __str__(self):
        return self.name


class Documents(models.Model):
    STATUS_CHOICES = (
        ('approved', 'تایید شده'),
        ('reject', 'رد شده'),
        ('waiting', 'در انتظار بررسی'),
    )
    id = models.AutoField(primary_key=True)
    seller = models.ForeignKey(Seller, on_delete=models.CASCADE, null=True, verbose_name="فروشنده")
    title = models.CharField(max_length=250, null=True, verbose_name="عنوان مدرک")
    image = models.ImageField(upload_to=document, null=True, blank=True, verbose_name="مدرک")
    status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='waiting', verbose_name="وضعیت مدرک")

    class Meta:
        verbose_name = "مدارک فروشنده"
        verbose_name_plural = "مدارک فروشندگان"

    def __str__(self):
        return str(self.title)
