import datetime
import math
import time
from django.core.validators import MinValueValidator, MaxValueValidator
from django.db import models
from django.conf import settings
from django.utils import timezone
from django.contrib import admin

from django.dispatch import receiver
from django.db.models.signals import pre_save

#test

BASES_CHOICES = [
        ('1', 'Monthey'),
        ('2', 'Uvrier'),
    ]

class Collabs_hour_types(models.Model):

    name = models.CharField("Dénomination", max_length=100)
    dtUpdate = models.DateTimeField('Date de modification', auto_now=True)
    dtCreated = models.DateTimeField('Date de création', auto_now_add=True)


    def __str__(self):
       return self.name

    class Meta:
        verbose_name = "type"
        verbose_name_plural = "types"


class Collabs_hour(models.Model):


    userName = models.CharField("Auteur", max_length=100)
    user = models.ForeignKey(settings.AUTH_USER_MODEL, limit_choices_to={'groups__name': "Intervenants"}, verbose_name="Collaborateur", on_delete=models.SET_NULL, null=True)
    sTargetUser = models.CharField("Collaborateur", blank=True, max_length=150, null=True, default="")
    nHour = models.PositiveIntegerField("Heures", default=0, validators=[MinValueValidator(0), MaxValueValidator(23)])
    nMinutes = models.PositiveIntegerField("Minutes", default=0, validators=[MinValueValidator(0), MaxValueValidator(60)])
    sRemarques = models.TextField("Remarques", blank=True)
    bNoticed = models.BooleanField("Vérifiée", blank=True, default=False)
    dtDate = models.DateField('Date', blank=False)
    sBases = models.CharField('Employé de la base de', max_length=1, choices=BASES_CHOICES,default=1)
    type = models.ForeignKey(Collabs_hour_types, verbose_name="Types", on_delete=models.DO_NOTHING)
    dtUpdate = models.DateTimeField('Date de modification', auto_now=True)
    dtCreated = models.DateTimeField('Date de création', auto_now_add=True)




    @admin.display( description='Total du mois')
    def get_total_hour_by_user(self):
        #objs = Collabs_hour.objects.filter(user_id=self.user_id,dtCreated__year=self.dtCreated.year, dtCreated__month=self.dtCreated.month)
        objs = Collabs_hour.objects.filter(user_id=self.user_id, dtDate__year=self.dtDate.year , dtDate__month=self.dtDate.month)
       # print(f"user {self.user} dtCreated__year {self.dtDate.year} dtCreated__month {self.dtDate.month}")
        #print( Collabs_hour.objects.all())

        total = 0.0

        for object in objs:
            total += object.nHour + object.nMinutes/60
           # print(f"hour = {object.nHour} minutes = {object.nMinutes} = {object.nMinutes/60}")



        if total > 0.0:
            hours = int(total)
            minutes = (total*60) % 60
            cent_min = float(minutes/60) + hours
            print(f"{minutes}/60= {float(minutes/60)} {hours}+{float(minutes/60)}={cent_min}")

            ret_string = ("%d:%02d (%.2f)" % (hours, minutes, cent_min))
            #ret_string = str(int(math.floor(total))) + ':' + str(int((total%(math.floor(total)))*60)) + f" ({total})"
            #ret_string = time.strftime("%H:%M", time.gmtime(total))
        else:
            ret_string = "0"

        return ret_string

    def get_bases_name(self):
        return BASES_CHOICES[int(self.sBases)-1][1]

    @admin.display(description='Présence de remarques', boolean=True)
    def has_remarques(self):
        ret = False
        if self.sRemarques != None and self.sRemarques != '':
            ret = True
        return ret
    def __str__(self):
        return f"Heure supplémentaire: {self.sTargetUser} : {self.dtCreated.strftime('%d.%m.%Y')} "

    class Meta:
        verbose_name = "heure supplémentaire"
        verbose_name_plural = "heures supplémentaires"
        permissions = (
            ("can_notice", "Peut noter comme traitée"),

        )

@receiver(pre_save, sender=Collabs_hour)
def on_update(instance,**kwargs):
    if instance.user is not None:
        instance.sTargetUser = f"{instance.user.first_name} {instance.user.last_name}"