from django.db import models
from django.contrib.auth import get_user_model
User_Profile = get_user_model()
from .managers import LeaveManager
from datetime import timedelta





SICK = 'sick'
HALF_DAY = 'half day'
EMERGENCY = 'emergency'
STUDY = 'study'
MATERNITY = 'maternity leave'

LEAVE_TYPE = (
(SICK,'Sick Leave'),
(HALF_DAY,'Half Day Leave'),
(EMERGENCY,'Emergency Leave'),
(MATERNITY,'Maternity Leave'),
('normal leave', 'Normal Leave'),
('casual leave', 'Casual Leave'),
('paid leave', 'Paid Leave'),
)

DAYS = 30


class Leave(models.Model):
	user = models.ForeignKey(User_Profile,on_delete=models.CASCADE,default=1)
	startdate = models.DateField(verbose_name=('Start Date'),null=True,blank=True)
	enddate = models.DateField(verbose_name=('End Date'),null=True,blank=True)
	leavetype = models.CharField(choices=LEAVE_TYPE,max_length=25,default=SICK,null=True,blank=True)
	reason = models.CharField(verbose_name=('Reason for Leave'),max_length=255,null=True,blank=True)
	defaultdays = models.PositiveIntegerField(verbose_name=('Leave days per year counter'),default=DAYS,null=True,blank=True)


	# hrcomments = models.ForeignKey('CommentLeave') #hide

	status = models.CharField(max_length=12,default='pending') #pending,approved,rejected,cancelled
	is_approved = models.BooleanField(default=False) #hide
	is_paid = models.BooleanField(default=False)
	updated = models.DateTimeField(auto_now=True, auto_now_add=False)
	created = models.DateTimeField(auto_now=False, auto_now_add=True)


	objects = LeaveManager()


	class Meta:
		verbose_name = ('Leave')
		verbose_name_plural = ('Leaves')
		ordering = ['-created'] #recent objects



	def __str__(self):
		return ('{0} - {1}'.format(self.leavetype,self.user))

	@property
	def leave_days(self):
		days_count = ''
		startdate = self.startdate
		enddate = self.enddate
		if startdate > enddate:
			return
		elif startdate == enddate:
			return 1
		dates = (enddate - startdate) + timedelta(days=1)
		return dates.days
	
	@property
	def leave_approved(self):
		return self.is_approved == True

	@property
	def approve_leave(self):
		if not self.is_approved:
			self.is_approved = True
			self.status = 'approved'
			self.save()

	@property
	def unapprove_leave(self):
		if self.is_approved:
			self.is_approved = False
			self.status = 'pending'
			self.save()



	@property
	def leaves_cancel(self):
		if self.is_approved or not self.is_approved:
			self.is_approved = False
			self.status = 'cancelled'
			self.save()



	# def uncancel_leave(self):
	# 	if  self.is_approved or not self.is_approved:
	# 		self.is_approved = False
	# 		self.status = 'pending'
	# 		self.save()



	@property
	def reject_leave(self):
		if self.is_approved or not self.is_approved:
			self.is_approved = False
			self.status = 'rejected'
			self.save()



	@property
	def is_rejected(self):
		return self.status == 'rejected'

        
        

class Holiday(models.Model):
    holiday_date = models.DateField(verbose_name=('Holiday Date'))
    holiday_name = models.CharField(verbose_name=('Holiday Name'), max_length=255)
    user = models.ForeignKey(User_Profile,on_delete=models.CASCADE, blank=True, null=True)