from django.db import models
from django.urls import reverse
from django.utils import timezone
from django.utils.translation import ugettext_lazy as _


RECORD_STATE = [('E', 'Enable'), ('D', 'Disable')]
TYPE_CATEGORY = [('U', 'USER'), ('R', 'RESSELER')]
TYPE_COVERAGE = [('W', 'Worldwide'), ('N', 'National')]
TYPE_OPERATION = [('C', 'Credit'), ('D', 'Debit')]


class CommonInfo(models.Model):
    createdBy = models.IntegerField(
        null=True, blank=True, verbose_name=_("Crée par"))
    editedBy = models.IntegerField(
        null=True, blank=True, verbose_name=_("Modifié par"))
    createdOn = models.DateTimeField(
        default=timezone.now, null=True, blank=True, verbose_name=_("Crée le"))
    editedOn = models.DateTimeField(
        default=timezone.now, null=True, blank=True, verbose_name=_("Modifié le"))
    state = models.CharField(
        max_length=1, choices=RECORD_STATE, default='E', verbose_name=_("Etat"))

    class Meta:
        abstract = True


class Product(CommonInfo):
    product_code = models.CharField(max_length=255, unique=True)
    product_name = models.CharField(max_length=100)
    product_image = models.ImageField(
        default='products/logo/default.png', upload_to='products/logo')
    product_description = models.TextField(null=True)
    product_publicationdate = models.DateField()
    product_file = models.FileField(upload_to='products/')

    class Meta:
        ordering = ['product_name']

    def __str__(self):
        return self.product_code

    def get_absolute_url(self):
        return reverse("product_detail", kwargs={"pk": self.pk})


class Tool(CommonInfo):
    tool_code = models.CharField(max_length=255, unique=True)
    tool_image = models.ImageField(
        default='tools/logo/default.png', upload_to='tool/logo')
    tool_description = models.TextField(null=True)
    tool_name = models.CharField(max_length=100)
    tool_publicationdate = models.DateField()
    tool_file = models.FileField(upload_to='tools/')

    class Meta:
        ordering = ['tool_code']

    def __str__(self):
        return self.tool_name

    def get_absolute_url(self):
        return reverse("tool_detail", kwargs={"pk": self.pk})


class Documentation(CommonInfo):
    documentation_code = models.CharField(max_length=255, unique=True)
    documentation_version = models.CharField(max_length=255)
    documentation_publicationdate = models.DateField()
    product = models.ForeignKey(
        Product, on_delete=models.CASCADE, null=True, blank=True, related_name="product_documentations")
    tool = models.ForeignKey(
        Tool, on_delete=models.CASCADE, null=True, blank=True)
    documentation_type = models.CharField(
        max_length=3, choices=[('pdf', 'PDF'), ('v', 'Vidéo')], default='pdf')
    documentation_file = models.FileField(upload_to='documentations/')

    class Meta:
        ordering = ['documentation_publicationdate']

    def __str__(self):
        return f'{self.documentation_type} for {self.product.product_name} version :{self.documentation_version}'

    def get_absolute_url(self):
        return reverse("_detail", kwargs={"pk": self.pk})
