import uuid
from django.db import models
from django.utils import timezone
from user.models import User

class Stamp(models.Model):


    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='stamps')
    stamp_function = models.CharField(max_length=20)
    description = models.TextField(blank=True, null=True)
    time = models.TimeField()
    date = models.DateField()
    start_date = models.DateTimeField()
    return_date = models.DateTimeField(null=True, blank=True)
    work_id = models.UUIDField(null=True, blank=True)
    project = models.ForeignKey('projects.Project', on_delete=models.SET_NULL, null=True, blank=True, related_name='stamps')
    task = models.ForeignKey('tasks.Task', on_delete=models.SET_NULL, null=True, blank=True, related_name='stamps')
    duration = models.CharField(max_length=50, blank=True, null=True, help_text='Duration in hours format (e.g., "8:30" or "8.5")')
    paycode = models.CharField(max_length=50, blank=True, null=True, help_text='Paycode from configuration questions')
    parent_stamp_id = models.UUIDField(null=True, blank=True, help_text='ID of the parent stamp that generated this stamp (for absence date ranges)')
    source = models.CharField(max_length=10, blank=True, null=True, help_text='Source of stamp creation: HOME or MANAGE')
    status = models.CharField(max_length=1, blank=True, default='', choices=[('A', 'Approved'), ('', 'Pending'), ('S', 'Suspended')])
    created_at = models.DateTimeField(default=timezone.now)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = 'stamps'
        ordering = ['-created_at']

    def __str__(self):
        return f"Stamp {self.stamp_function} for {self.user.firstname} {self.user.lastname} at {self.time}"

    def save(self, *args, **kwargs):
        self.updated_at = timezone.now()
        super().save(*args, **kwargs)
