from django.db import models

from TransitoApp.btfsoap import consultar_vehiculos_placa, buscar_persona
from sri.models import Configuracion


# Create your models here.

class Clientes(models.Model):
    identificacion=models.CharField(default='05',max_length=2)
    numero_identificacion=models.CharField(max_length=20, unique=True)
    razon_social=models.CharField(max_length=100)
    direccion=models.CharField(max_length=100)
    telefono=models.CharField(max_length=20)
    email=models.EmailField(default='transitoep@elguabo.gob.ec', max_length=200)

    # def save(
    #     self, force_insert=False, force_update=False, using=None, update_fields=None
    # ):
    #     self.razon_social=self.razon_social.replace("('",'').replace("',)",'')
    #     super(Clientes,self).save()

    def __str__(self):
        return self.razon_social
class Avaluo(models.Model):
    desde = models.DecimalField(default=0.0, decimal_places=2, max_digits=9)
    hasta = models.DecimalField(default=0.0, decimal_places=2, max_digits=9)

    def __str__(self):
        return f'{self.desde}-{self.hasta}'


class Tonelaje(models.Model):
    avaluo = models.ForeignKey(Avaluo, on_delete=models.CASCADE, null=True)
    desde = models.DecimalField(default=0.0, decimal_places=2, max_digits=9)
    hasta = models.DecimalField(default=0.0, decimal_places=2, max_digits=9)

    def __str__(self):
        return f'{self.desde}-{self.hasta}'


class tipoServicio(models.Model):
    codigo=models.CharField(max_length=20,default='1.3.01')
    descripcion = models.CharField(max_length=200)
    costo = models.DecimalField(default=0.0, decimal_places=2, max_digits=9)
    administrativo = models.DecimalField(default=2.0, decimal_places=2, max_digits=9)
    avaluo = models.ForeignKey(Avaluo, on_delete=models.CASCADE, null=True, blank=True)
    tonelaje = models.ForeignKey(Tonelaje, on_delete=models.CASCADE, null=True, blank=True)
    total = models.DecimalField(default=0.0, decimal_places=2, max_digits=9)
    estado = models.BooleanField(default=True)

    def __str__(self):
        return self.descripcion
    def save(
            self, force_insert=False, force_update=False, using=None, update_fields=None
    ):
        self.total = float(self.costo) + float(self.administrativo)

        super(tipoServicio, self).save()

class OrdenPago(models.Model):
    estado=models.BooleanField(default=False)
    fecha = models.DateTimeField(auto_now_add=True)
    numero = models.CharField(max_length=20, default="")
    placa = models.CharField(max_length=10)
    avaluo = models.DecimalField(default=0, decimal_places=2, max_digits=10)
    tonelaje = models.DecimalField(default=0, decimal_places=2, max_digits=10)
    marca = models.CharField(max_length=60)
    modelo = models.CharField(max_length=60)
    anio = models.IntegerField(default=0)
    clase = models.CharField(max_length=60)
    servicio = models.CharField(max_length=60)
    cedula = models.CharField(max_length=13)
    nombres = models.CharField(max_length=60)
    apellidos = models.CharField(max_length=60)
    total = models.DecimalField(max_digits=10, decimal_places=2, default=0)
    eliminar=models.BooleanField(default=False)
    numero_items=models.IntegerField(default=0)
    cliente=models.ForeignKey(Clientes, null=True,blank=True, on_delete=models.CASCADE)
    pago_electronico = models.BooleanField(default=False)
    def __str__(self):
        return self.numero

    def save(
            self, force_insert=False, force_update=False, using=None, update_fields=None
    ):

        result = consultar_vehiculos_placa(self.placa.upper())
        bpersona = buscar_persona(self.cedula)
        if bpersona['nombre1']!="":
            self.nombres = bpersona['nombre1']+" "+bpersona['nombre2']
            if 'apellido1' in bpersona:
                self.apellidos = bpersona['apellido1']
            if 'apellido2' in bpersona:
                self.apellidos += " " + bpersona['apellido2']
        if not self.numero:
            self.numero = "CRTV-%s" % (str.zfill(str(OrdenPago.objects.count() + 1), 10))
        self.marca = result['Marca']
        self.modelo = result['Modelo']
        self.anio = result['Anio']
        self.clase = result['Clase']
        self.servicio = result['TipoServicio']

        super(OrdenPago, self).save()


class DetalleOrden(models.Model):
    n_comprobante = models.CharField(max_length=15, null=True, blank=True)
    orden = models.ForeignKey(OrdenPago, on_delete=models.CASCADE)
    items = models.ForeignKey(tipoServicio, on_delete=models.CASCADE)
    costo = models.DecimalField(default=0, decimal_places=2, max_digits=10)
    cantidad = models.IntegerField(default=1)
    total = models.DecimalField(default=0, decimal_places=2, max_digits=10)
    electronico=models.BooleanField(default=False)
    numero_autorizacion=models.CharField(max_length=100,null=True,blank=True)
    punto_emision=models.CharField(max_length=3,default='002')
    emision=models.DateField(null=True,blank=True)
    estado=models.CharField(max_length=50,default="NO ENVIADO")


    def save(
        self, force_insert=False, force_update=False, using=None, update_fields=None
    ):
        # ndet = DetalleOrden.objects.filter(electronico=True, orden__eliminar=False).exclude(items__descripcion='Servicios administrativos').count()
        # if not self.items.descripcion=='Servicios administrativos' and self.electronico==True:
        #     if not self.n_comprobante:
        #         self.n_comprobante=str.zfill(str(ndet+Configuracion.objects.get(estado=True).secuencial),9)
        if self.items.descripcion=='Servicios administrativos':
            self.electronico=False
        super(DetalleOrden,self).save()

class NotaCredito(models.Model):
    fecha=models.DateField(null=True,blank=True)
    numero=models.CharField(null=True,blank=True, unique=True, max_length=500)
    cliente=models.ForeignKey(Clientes, on_delete=models.CASCADE)
    valor=models.DecimalField(default=0, decimal_places=2, max_digits=10)
    orden = models.ForeignKey(OrdenPago, on_delete=models.CASCADE, null=True, blank=True)

    def __str__(self):
        return self.numero

class DetalleNotaCredito(models.Model):
    codigo=models.CharField(null=True,blank=True, max_length=20)
    nota=models.ForeignKey(NotaCredito, on_delete=models.CASCADE, null=True,blank=True)
    cantidad=models.IntegerField(default=1)
    descripcion=models.CharField(null=True,blank=True, max_length=100)
    valor=models.DecimalField(default=0, decimal_places=2, max_digits=10)

    def __str__(self):
        return self.nota.numero


# detx=DetalleOrden.objects.exclude(n_comprobante="", n_comprobante__isnull=False).count()
# contador=detx+Configuracion.objects.get(estado=True).secuencial
# print('contador',detx, 'valor',contador)
