from django.db import models
from django.contrib.auth.models import User
import json
import Client
# Create your models here.

class SoftDeleteModel(models.Model):

    is_deleted = models.BooleanField(default=False)

    def soft_delete(self):
        self.is_deleted = True
        self.save()

    def restore(self):
        self.is_deleted = False
        self.save()

    class Meta:
        abstract = True


# class Department(models.Model):
#     name=models.CharField(max_length=50)

#     def __str__(self):
#         return self.name

# class Employee(models.Model):
#     name=models.CharField(max_length=50)
#     department=models.CharField(max_length=50)

#     def __str__(self):
#         return self.name

class Timeslots(models.Model):
    coach=models.ForeignKey(User, on_delete=models.CASCADE, default=None)
    day_name=models.CharField(max_length=50, default=None)
    day_number=models.CharField(max_length=10, default=None)
    slots=models.CharField(max_length=200, default=None)        #json formatted data
    created_at=models.DateTimeField(auto_now_add=True)
    updated_at=models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.day_name

    @property
    def serialize(self):
        dic = {}
        dic['id'] = self.id
        dic['day_name'] = self.day_name
        dic['slots'] = json.loads(self.slots).split(',')
        dic['day_number'] = self.day_number
        # coach_id = self.coach_id
        # dic['coach_name'] = self.coach.userprofile.name
        return dic

class Leaves(models.Model):
    user=models.ForeignKey(User, on_delete=models.CASCADE, default=None)
    leave_from_date=models.CharField(max_length=100, blank=True, null=True)
    leave_to_date=models.CharField(max_length=200, blank=True, null=True)
    type_leave_from=models.CharField(max_length=50, blank=True, null=True)
    type_leave_to=models.CharField(max_length=50, blank=True, null=True)
    slots_leave_from=models.TextField(blank=True, null=True) #json formatted
    slots_leave_to=models.TextField(blank=True, null=True)   #json formatted
    no_leave_days=models.CharField(max_length=10, blank=True, null=True)    #general, emergency, taken_by_coach
    leave_type=models.CharField(max_length=50, blank=True, null=True)
    leave_status=models.CharField(max_length=50, blank=True, null=True)     #pending, cancel, approved
    created_at=models.DateTimeField(auto_now_add=True)
    updated_at=models.DateTimeField(auto_now=True)

    @property
    def serialize(self):
        dic = {}
        dic['leave_from_date'] = self.leave_from_date
        dic['leave_to_date'] = self.leave_to_date
        dic['type_leave_from'] = self.type_leave_from
        dic['type_leave_to'] = self.type_leave_to
        dic['slots_leave_from'] = self.slots_leave_from.split(',')
        dic['slots_leave_to'] = self.slots_leave_to.split(',') if self.slots_leave_to is not None else ''
        dic['no_leave_days'] = self.no_leave_days
        dic['leave_type'] = self.leave_type
        dic['leave_status'] = self.leave_status
        dic['user_id'] = self.user_id
        # dic['user'] = self.user.serialize()
        return dic

class Notes(SoftDeleteModel):
    coach = models.ForeignKey(User, on_delete=models.CASCADE, default=None, related_name='note_coach')
    client = models.ForeignKey(User, on_delete=models.CASCADE, default=None, related_name='note_client')
    data = models.TextField()
    is_pinned = models.CharField(max_length=50, default="0", editable=False)
    created_at=models.DateTimeField(auto_now_add=True)
    updated_at=models.DateTimeField(auto_now=True)

    @property
    def serialize(self):
        dic = {}
        dic['id'] = self.id
        dic['coach_name'] = self.coach.userprofile.name
        dic['client_name'] = self.client.userprofile.name
        dic['client_profile_pic'] = str(self.client.userprofile.profile_pic)
        dic['client_email'] = self.client.email
        dic['client_id'] = self.client.id
        # dic['client_profile_pic'] = str(self.client.userprofile.profile_pic)
        dic['data'] = self.data
        dic['is_pinned'] = self.is_pinned
        dic['created_at'] = self.created_at
        dic['updated_at'] = self.updated_at
        try:
            last_booking = Client.models.Bookings.objects.filter(coach_id=self.coach_id, user_id=self.client_id).order_by('-id').first()
            dic['booking_id']               = last_booking.id
            dic['booking_coach_id']         = last_booking.coach_id
            dic['booking_client_id']        = last_booking.user_id
            dic['booking_session_date']     = last_booking.session_date
            dic['booking_session_time']     = last_booking.session_time
            dic['booking_category_id']      = last_booking.coach.userprofile.category_id
        except:
            dic['booking_id']               = None
            dic['booking_coach_id']         = None
            dic['booking_client_id']        = None
            dic['booking_session_date']     = None
            dic['booking_session_time']     = None
            dic['booking_category_id']      = None
        return dic
