from django.db import models
import datetime
from nlt import numlet as nl

def armar_cientos(num: str) -> str:
    unidades = ['', 'uno', 'dos', 'tres', 'cuatro', 'cinco', 'seis', 'siete', 'ocho', 'nueve']
    decenas = ['', 'dieci', 'veinti', 'treinta y ', 'cuarenta y ', 'cincuenta y ', 'sesenta y ', 'setenta y ',
               'ochenta y ', 'noventa y ']
    centenas = ['', 'ciento', 'doscientos', 'trescientos', 'cuatrocientos', 'quinientos', 'seiscientos',
                'setecientos', 'ochocientos', 'novecientos']

    cientos = int(num[0]) if len(num) > 2 else 0
    decena, unidad = num[-2:]
    return (f"{centenas[cientos]} " if cientos != 0 else '') + decenas[int(decena)] + unidades[int(unidad)]

def hora_retraso(hora, tipo, dia):
    format = '%H:%M:%S'
    time = None
    if  datetime.datetime.strptime(hora.strftime(format),format)>datetime.datetime.strptime("00:00:00", format) and datetime.datetime.strptime(hora.strftime(format),format) <datetime.datetime.strptime('11:59:59', format):
        if str(hora)==datetime.datetime.strptime(hora.strftime("00:00:00"),format):
            time= "8:00:00"
        print('esta entre las 6:30 y las 12:00')
        if dia in [5,6]:
            print('fin de semana')
            if datetime.datetime.strptime(str(hora.strftime(format)), format) > datetime.datetime.strptime("09:00:00", format):
                time = datetime.datetime.strptime(str(hora.strftime(format)), format) - datetime.datetime.strptime("09:00:00", format)
            else:
                time = datetime.datetime.strptime("0:00:00", format).time()
        else:
            if tipo==2 or tipo==4:
                print('agentes y simert')
                if datetime.datetime.strptime(str(hora.strftime(format)), format) > datetime.datetime.strptime("09:00:00", format):
                    time = datetime.datetime.strptime(str(hora.strftime(format)), format) -datetime.datetime.strptime("09:00:00", format)
                else:
                    time = datetime.datetime.strptime("0:00:00", format).time()
            else:
                print('funcionarios')
                if datetime.datetime.strptime(str(hora.strftime(format)), format) > datetime.datetime.strptime("08:00:00", format):
                    time = datetime.datetime.strptime(str(hora.strftime(format)), format) -datetime.datetime.strptime("08:00:00", format)
                else:
                    time = datetime.datetime.strptime("0:00:00", format).time()
    else:
        time = datetime.datetime.strptime("0:00:00", format).time()
    print('valor devuelto:', time, hora, tipo)
    return time

class Departamento(models.Model):
    nombre=models.CharField(max_length=60)

    def __str__(self):

        return self.nombre
class Empleados(models.Model):
    codigo=models.CharField(max_length=10)
    id_biometrico=models.IntegerField(unique=True)
    nombres=models.CharField(max_length=60,null=True,blank=True)
    apellidos=models.CharField(max_length=60, null=True,blank=True)
    departamento=models.ForeignKey(Departamento,on_delete=models.CASCADE,null=True,blank=True)
    email=models.EmailField(max_length=100,null=True,blank=True)
    cargo=models.CharField(max_length=60,null=True,blank=True)
    estado=models.BooleanField(default=True)
    direccion=models.CharField(max_length=120,null=True,blank=True)
    ciudad=models.CharField(max_length=60, default="El Guabo")
    telefono=models.CharField(max_length=15,default='0000000000')
    partida_presupuestaria=models.CharField(max_length=30,default='7.1.05.10')
    certificacion_numero=models.CharField(max_length=30,default='7.1.05.10')
    sueldo=models.DecimalField(max_digits=9, decimal_places=2,default=0)
    sueldo_letras=models.CharField(max_length=250, default='CERO')


    def __str__(self):
        return f"{self.nombres} {self.apellidos}"

    def save(
        self, force_insert=False, force_update=False, using=None, update_fields=None
    ):
        self.sueldo_letras=nl.Numero(self.sueldo).a_letras.upper()

        super(Empleados,self).save()

class Contrato(models.Model):
    fecha_inicio=models.DateField(null=True,blank=True)
    fecha_fin= models.DateField(null=True, blank=True)
    empleado=models.ForeignKey(Empleados, on_delete=models.CASCADE)
    cargo=models.CharField(max_length=120, default="")
    partida_presupuestaria = models.CharField(max_length=30, default='7.1.05.10')
    certificacion_numero = models.CharField(max_length=30, default='7.1.05.10')
    sueldo = models.DecimalField(max_digits=9, decimal_places=2, default=0)
    sueldo_letras = models.CharField(max_length=250, null=True,blank=True)

    def save(
        self, force_insert=False, force_update=False, using=None, update_fields=None
    ):
        if not self.sueldo:
            self.sueldo=float(self.empleado.sueldo)
            self.sueldo_letras = self.empleado.sueldo_letras
        if not self.cargo:
            self.cargo=self.empleado.cargo
            self.certificacion_numero=self.empleado.certificacion_numero
            self.partida_presupuestaria=self.empleado.partida_presupuestaria

        super(Contrato,self).save()



class Marcaciones(models.Model):
    id_marcacion=models.IntegerField(unique=True)
    empleado=models.ForeignKey(Empleados,on_delete=models.CASCADE)
    hora_marcacion=models.DateTimeField(null=True,blank=True)
    retraso = models.TimeField(null=True, blank=True)
    fecha=models.DateField(null=True,blank=True)
    hora=models.TimeField(null=True,blank=True)
    detalle_marcacion=models.TextField(default="Marcación Regular",)
    justificado=models.BooleanField(default=False)
    feriado=models.BooleanField(default=False)


    def save(
        self, force_insert=False, force_update=False, using=None, update_fields=None
    ):
        if not self.retraso:
            self.retraso=str(hora_retraso(self.hora_marcacion.time(), self.empleado.departamento_id, self.fecha.weekday()))
            if self.retraso>"0:00:00" and self.feriado==False:
                self.detalle_marcacion="Atraso"
            elif self.retraso=="0:00:00":
                self.detalle_marcacion = "Marcación Regular"
            print(self.retraso)
        super(Marcaciones, self).save()




class Permisos(models.Model):
    empleado=models.ForeignKey(Empleados, on_delete=models.CASCADE)
    justificable = models.BooleanField(default=False)

    fecha=models.DateField(auto_now_add=True)
    fecha_salida=models.DateField()
    hora_salida=models.TimeField(null=True,blank=True)
    horas=models.DecimalField(default=0, max_digits=9, decimal_places=2)
    detalle_permiso=models.TextField(null=True,blank=True)


