
from django.db import models
from quotation.models import Technician_Assigned_Order_Item,BaseModel
from django.utils import timezone
from datetime import timedelta
from django.db.models import Sum
from authentication.models import User
from customer.models import Customer


from django.utils import timezone
from django.contrib.messages import success




class Job_Time(BaseModel):
    
    NOT_STARTED = 0
    IN_PROGESS=1
    PART_NEEDED=2
    COMPLETED = 3
  
    JOB_STATUS_CHOICES=(
        (NOT_STARTED, 'Not Started'),
        (IN_PROGESS, 'In Progess'),
        (PART_NEEDED, 'Part Needed'),
        (COMPLETED, 'Completed'),
        )
    
    assigned_order_item = models.ForeignKey(Technician_Assigned_Order_Item, related_name='technician_jobs', on_delete=models.CASCADE)
    start_time = models.DateTimeField(blank=True,null=True)
    stop_time = models.DateTimeField(blank=True, null=True)
    job_status=models.PositiveSmallIntegerField(choices=JOB_STATUS_CHOICES,default=0,null=True)
    total_job_time = models.DurationField(blank=True, null=True)
    
    
    
    def save(self, *args, **kwargs):
        if self.start_time and self.stop_time:
            total_seconds = (self.stop_time - self.start_time).total_seconds()
            self.total_job_time = timedelta(seconds=total_seconds)
        else:
            self.total_job_time = timedelta(seconds=0)

        super().save(*args, **kwargs)
  

       
    def __str__(self):
        return f"Job {self.id}"


class Job_Interval_Time(BaseModel):
    
    # NOT_STARTED = 0
    # IN_PROGESS=1
    # PART_NEEDED=2
    # COMPLETED = 3
  
    # JOB_STATUS_CHOICES=(
    #     (NOT_STARTED, 'Not Started'),
    #     (IN_PROGESS, 'In Progess'),
    #     (PART_NEEDED, 'Part Needed'),
    #     (COMPLETED, 'Completed'),
    #     )
    
    assigned_order_item = models.ForeignKey(Technician_Assigned_Order_Item, related_name='technician_jobs_interval', on_delete=models.CASCADE)
    start_time_timer=models.DateTimeField(null=True)
    stop_time_timer=models.DateTimeField(null=True)
    total_time_timer=models.DurationField(blank=True, null=True)
    
    
    # def save(self, *args, **kwargs):
    #     if self.start_time and self.stop_time:
    #         total_seconds = (self.stop_time - self.start_time).total_seconds()
    #         self.total_job_time = timedelta(seconds=total_seconds)
    #     else:
    #         self.total_job_time = timedelta(seconds=0)

    #     super().save(*args, **kwargs)
  

       
    def __str__(self):
        return f"Job_Interval_Time {self.id}"



class CallDetail(BaseModel):
    
  
    TECHNICIAN = 1
    CUSTOMER = 2
    CALLER_CHOICES = [
        
        (TECHNICIAN, 'Technician'),
        (CUSTOMER, 'Customer'),
    ]

    assigned_order_item = models.ForeignKey(Technician_Assigned_Order_Item, on_delete=models.CASCADE, related_name='call_details')

    call_time = models.DateTimeField(blank=True,null=True)
    call_duration = models.CharField(max_length=10)
    phone = models.CharField(max_length=21)
    caller_type = models.IntegerField(choices=CALLER_CHOICES,null=True,blank=True)
    
    
    @property
    def caller_name(self):
        if self.caller_type == self.TECHNICIAN and self.assigned_order_item and self.assigned_order_item.technician:
            return self.assigned_order_item.technician.userinfo.get_name
        elif self.caller_type == self.CUSTOMER and self.assigned_order_item and self.assigned_order_item.order_item.order.invoice.customer:
            return str(self.assigned_order_item.order_item.order.invoice.customer)
        else:
            return "-"
    def __str__(self):
        return f"Call Detaill {self.id}"

class Notification(BaseModel):
    technician = models.ForeignKey(User, on_delete=models.CASCADE)
    order_id = models.IntegerField()
    sent_at = models.DateTimeField(auto_now_add=True,null=True)
    last_sent_at = models.DateTimeField(default=timezone.now,null=True)
    viewed = models.BooleanField(default=False,null=True)