from django.db import models
from mainApp.models import *
from django.utils.translation import gettext as _

# Create your models here.

class Surgery(models.Model):
    name = models.CharField(max_length=250)
    description = models.CharField(max_length=250)
    is_service = models.BooleanField(default=True) # True كشف / خدمة علاجية -- False فحص عيون 
    eye_count = models.IntegerField(default=0)#عدد العيون في حالة الفحص عشان حساب الأخصائي - الدكتور 
    price = models.IntegerField(default=0)#center price السعر لمرضي المركز أيا كان الدكتور 
    def __str__(self):
        return self.name

class SurgeryDoctor(models.Model):
    surgery = models.ForeignKey(
        Surgery,
        related_name="SurgeryDoctor_surgery",
        blank=True,
        null=True,
        on_delete=models.PROTECT,
    )        
    doctor = models.ForeignKey(
        User,
        related_name="Surgery_doctor",
        blank=True,
        null=True,
        on_delete=models.PROTECT,
    )
    doctor_price = models.IntegerField(default=0)     
    class Meta:
        unique_together = ('surgery', 'doctor',)
    def __str__(self):
        return "{}-{}-{}".format(self.surgery.name,self.doctor.get_full_name(),str(self.doctor_price))

#from django.db.models.functions import Coalesce

class PtSurgery(models.Model):
    patient =  models.ForeignKey(
        Patient,
        related_name="PtSurgery_patient",
        blank=True,
        null=True,
        on_delete=models.PROTECT,
    )
    surgery = models.ForeignKey(
        Surgery,
        related_name="PtSurgery_surgery",
        blank=True,
        null=True,
        on_delete=models.PROTECT,
    )
    #shiftPeriod=hft7 shift wa2flo 3shan a2fl el7sabat w 3shan ay 7d t25eer myfdlsh yzhr m3aya mada el7yah
    entry_order = models.IntegerField(default=1000,help_text = _(" كل يوم جديد يبدأ من أول رقم 1  , ترتيب الدخول في الفترة الحالية"))
    amount_required = models.IntegerField(default=0,help_text = _("ثمن الخدمة العلاجية بعد تطبيق خصم نقابة او نسبة خصم لشركةاو بدون خصم"))
    amount_paid = models.IntegerField(default=0,help_text = _(" المبلغ المدفوع < مقابل الخدمة العلاجية المقدمة>"))
    amount_remaining = models.IntegerField(default=0,help_text = _(" لو اتبقي علي المريض فلوس في الزيارة دي أو للمريض فلوس"))
    doctor_discount = models.IntegerField(default=0)
    next_consult_days = models.IntegerField(default=0)
    entry_datetime = models.DateTimeField(blank=True,null=True)
    visit_status = models.CharField(max_length=2, choices=ENTRY_STATUS_CHOICES , default="2W")
    visit_type = models.IntegerField(choices=VISIT_TYPES_CHOICES , default=1)
    visit_day = models.DateField(blank=True,null=True)
    doctor_notes = models.TextField(blank=True, null=True)
    is_doctor_advice_readed = models.BooleanField(default=False)
    created_by = models.ForeignKey(User,on_delete=models.PROTECT,related_name="PtSurgery_created_by",)
    doctor = models.ForeignKey(User,on_delete=models.PROTECT,related_name="PtSurgery_doctor",)
    created_at = models.DateTimeField(auto_now_add=True)
    is_sheet_uploaded = models.BooleanField(default=False)
    
    is_e_invoice_request = models.BooleanField(default=False)#معمولها طلب ولا لأ
    #models.AutoField(auto_created = True, 
    invoice_serial = models.IntegerField(blank=True,null=True,unique=True)#رقم الايصال الورقى 
    invoice_notes = models.CharField(max_length=150,blank=True, null=True)#ملاحظات الفاتورة
    invoice_last_update_by = models.ForeignKey(User,on_delete=models.PROTECT,blank=True,null=True)
    #additional_auto_field = models.IntegerField()

    # def save(self, *args, **kwargs):
    #     if not self.invoice_serial:
    #         max_invoice_serial= PtSurgery.objects.aggregate(max_invoice_serial=Coalesce(Max('invoice_serial'),1))['max_invoice_serial']
    #         self.invoice_serial = max_invoice_serial
    #     super().save(*args, **kwargs)
    class Meta:
        unique_together = ('visit_day', 'entry_order','doctor')
    def __str__(self):
        return "{}-{}".format(self.patient.fullname,self.surgery.name)
    
'''
# Create your models here.
SURGERY_STATUS_CHOICES = (
    ("1W", "مشخص جراحى "),# WAITING , MSTNI DOORO مشخص جراحى  btn-warning 
    ("2D", "تم التنفيذ"),# done  لغى بالتليفون اثناء عمليةا لتاكيد   btn-success 
    ("3T", "تحويل لدكتور اخر "),#transfer لغى بالتليفون اثناء عمليةا لتاكيد   btn-success 
    ("4C", "إلغاء"),#canceled لغى بالتليفون اثناء عمليةا لتاكيد  btn-danger 
)
class SurgeryStatus(models.Model):
    name = models.CharField(max_length=50)
    surgery_status = models.CharField(max_length=3, choices=SURGERY_STATUS_CHOICES ,unique=True)
    css_class = models.CharField(max_length=100)#btn-success  btn-warning  btn-danger 
    def __str__(self):
        return self.name

class SurgeryDoctor(models.Model):
    surgery = models.ForeignKey(
        Surgery,
        related_name="SurgeryDoctor_surgery",
        blank=True,
        null=True,
        on_delete=models.PROTECT,
    )        
    doctor = models.ForeignKey(
        User,
        related_name="SurgeryDoctor_doctor",
        
        on_delete=models.PROTECT,
    )
    center_price = models.IntegerField(default=0)#السعر لحالات المركز لو تعاقدنا معاه بأسعار مختلفة
    private_price = models.IntegerField(default=0)#السعر للحالات الخاصه طبقا لكل دكتور 
    created_by = models.ForeignKey(User,on_delete=models.PROTECT,related_name="SurgeryDoctor_updated_by",blank=True,null=True,)
    created_at = models.DateTimeField(auto_now=True)     
    class Meta:
        unique_together = ('surgery', 'doctor',)
    def __str__(self):
        return "{}-{}-{}".format(self.surgery.name,self.doctor.get_full_name(),str(self.doctor_price))
'''
