from django.db import models
from django.core.validators import FileExtensionValidator
from django.contrib.auth.models import User
from .validators import file_size

FUEL_CHOICES = [
    ('Diesel', 'diesel'),
    ('Benzyna', 'petrol'),
]
TRANSMISSION_CHOICES = [
    ('Manualna', 'manual'),
    ('Automatyczna', 'automatic'),
]

class Brand(models.Model):
    name = models.CharField(max_length=20)
    
    def __str__(self):
        return self.name
    
class CarModel(models.Model):
    name = models.CharField(max_length=20)
    
    def __str__(self):
        return self.name
    
class Engine(models.Model):
    name = models.CharField(max_length=60)
    
    def __str__(self):
        return self.name
    
class Car(models.Model):
    brand = models.ForeignKey(Brand, on_delete=models.SET_NULL, null=True)
    model = models.ForeignKey(CarModel, on_delete=models.SET_NULL, null=True)
    engine = models.ForeignKey(Engine, on_delete=models.SET_NULL, null=True)
    fuel = models.CharField(max_length=7, choices=FUEL_CHOICES, default='diesel')
    transmission = models.CharField(max_length=12, choices=TRANSMISSION_CHOICES, default='manual')
    
    def __str__(self):
        return f'CAR {self.pk}'
    
class Service(models.Model):
    name = models.CharField(max_length=30)
    
    def __str__(self):
        return self.name
    
class PriceList(models.Model):
    car = models.ForeignKey(Car, on_delete=models.CASCADE)
    service = models.ForeignKey(Service, on_delete=models.CASCADE)
    price = models.PositiveIntegerField()
    active = models.BooleanField(default=True)

    def __str__(self):
        return f'{self.service.name}-{self.price}'

class Order(models.Model):
    user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
    status = models.TextField(max_length=250, default="Nowe")
    user_comment = models.TextField(max_length=250, default="")
    date = models.DateTimeField(auto_now_add=True)
    price = models.ManyToManyField(PriceList, null=True)
    org_file = models.FileField(upload_to='org_files/', null=True, validators=[file_size])
    mod_file = models.FileField(upload_to='mod_files/', null=True)
    
    def __str__(self):
        return f'{self.user.username}-{self.pk}'

    @property
    def total_price(self):
        total = 0
        for price in self.price.all():
            total += price.price
        return total  
    
class Csv(models.Model):
    file = models.FileField(
        upload_to='csv_files/',
        validators=[FileExtensionValidator(['csv'])],
        )
    activated = models.BooleanField(default=False)
    upload_time = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f'CSV_{self.pk}'