from django.db import models
from django.utils import timezone
from accounts.models import Employee

# Create your models here.

class LeaveRequest(models.Model):
    LEAVE_TYPES = [
        ('ANN', 'Annual Leave'),
        ('SICK', 'Sick Leave'),
        ('EMER', 'Emergency Leave'),
    ]
    
    STATUS_CHOICES = [
        ('PENDING', 'Pending'),
        ('HR_APPROVED', 'HR Approved'),
        ('HR_REJECTED', 'HR Rejected'),
        ('REG_APPROVED', 'Registrar Approved'),
        ('REG_REJECTED', 'Registrar Rejected'),
    ]

    employee = models.ForeignKey(Employee, on_delete=models.CASCADE)
    leave_type = models.CharField(max_length=4, choices=LEAVE_TYPES)
    start_date = models.DateField()
    end_date = models.DateField()
    reason = models.TextField()
    status = models.CharField(max_length=12, choices=STATUS_CHOICES, default='PENDING')
    
    # HR approval fields
    hr_approved_by = models.ForeignKey(
        Employee,
        on_delete=models.SET_NULL,
        null=True,
        blank=True,
        related_name='hr_approved_leaves'
    )
    hr_approved_at = models.DateTimeField(null=True, blank=True)
    hr_comment = models.TextField(blank=True)

    # Registrar approval fields
    registrar_approved_by = models.ForeignKey(
        Employee,
        on_delete=models.SET_NULL,
        null=True,
        blank=True,
        related_name='registrar_approved_leaves'
    )
    registrar_approved_at = models.DateTimeField(null=True, blank=True)
    registrar_comment = models.TextField(blank=True)
    
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def get_status_color(self):
        """Return Bootstrap color class based on status"""
        colors = {
            'PENDING': 'warning',
            'HR_APPROVED': 'primary',
            'HR_REJECTED': 'danger',
            'REG_APPROVED': 'success',
            'REG_REJECTED': 'danger'
        }
        return colors.get(self.status, 'secondary')

    def __str__(self):
        return f"{self.employee} - {self.get_leave_type_display()} ({self.get_status_display()})"

    @property
    def days(self):
        """Calculate number of leave days requested"""
        if not (self.start_date and self.end_date):
            return 0
        delta = self.end_date - self.start_date
        return delta.days + 1  # Include both start and end dates
