from django.db import models
from basic.models import SymptomType,CalculationMethod,BMICase,Language
from user_profile.models import MedicalProfile
import os
# Create your models here.

# Tools and other features that use MedicalProfile with Child

def bumpie_image_path(instance, filename):
    ext = filename.split(".")
    parentId = instance.medicalProfileId.childId.parentId.id
    return os.path.join("uploads/bumpie/parent_" + str(parentId), ext[0] + "." + ext[1])


def memory_path(instance, filename):
    ext = filename.split(".")
    parentId = instance.medicalProfileId.childId.parentId.id
    return os.path.join("uploads/memory/parent_" + str(parentId), ext[0] + "." + ext[1])

# Bumpie

class Bumpie(models.Model):
    weekNumber = models.IntegerField()
    image = models.ImageField(
        upload_to=bumpie_image_path,
        null=True,
        blank=True,
        # default="/default/slider_holder.jpg",
    )
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()
    medicalProfileId = models.ForeignKey(
        MedicalProfile,
        on_delete=models.CASCADE,
        related_name="medicalprofile_bumpiecalculator",
    )

    def delete(self, *args, **kwargs):
        if self.image and hasattr(self.image, "url"):
            if self.image.url != "/media/default/slider_holder.jpg":
                self.image.delete()
        super().delete()


# Symptom Group

class SymptomGroup(models.Model):
    date = models.DateTimeField()
    note = models.TextField(blank=True, default="", null=True)
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()
    medicalProfileId = models.ForeignKey(
        MedicalProfile, on_delete=models.CASCADE, related_name="medicalprofile_symptomgroup"
    )


# Symptom Row

class SymptomRow(models.Model):
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()
    symptomTypeId = models.ForeignKey(
        SymptomType, on_delete=models.CASCADE, related_name="symptomtype_symptomrow"
    )
    symptomGroupId = models.ForeignKey(
        SymptomGroup, on_delete=models.CASCADE, related_name="symptomgroup_symptomrow"
    )


# Kick Tracker Group

class KickTrackerGroup(models.Model):
    date = models.DateTimeField()
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()
    medicalProfileId = models.ForeignKey(
        MedicalProfile,
        on_delete=models.CASCADE,
        related_name="medicalprofile_kicktrackergroup",
    )


# Kick Tracker Row

class KickTrackerRow(models.Model):
    date = models.DateTimeField()
    seconds = models.IntegerField(default=0)
    kicks = models.IntegerField()
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()
    kickTrackerGroupId = models.ForeignKey(
        KickTrackerGroup,
        on_delete=models.CASCADE,
        related_name="kicktrackergroup_kicktrackerrow",
    )


# Ovulation Calculator

class Ovulation(models.Model):
    lastMenstrualPeriod = models.DateTimeField()
    cycleLength = models.IntegerField()
    nextPeriod = models.DateTimeField()
    ovulationDay = models.DateTimeField()
    fertileStart = models.DateTimeField()
    fertileEnd = models.DateTimeField()
    expectedDueDate = models.DateTimeField()
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()
    medicalProfileId = models.ForeignKey(
        MedicalProfile, on_delete=models.CASCADE, related_name="medicalprofile_ovulation"
    )


# Memory

class Memory(models.Model):
    image = models.ImageField(
        upload_to=memory_path,
        null=True,
        blank=True,
        # default="/default/slider_holder.jpg",
    )
    caption = models.TextField()
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()

    medicalProfileId = models.ForeignKey(
        MedicalProfile,
        on_delete=models.CASCADE,
        related_name="medicalprofile_memory",
    )

    def delete(self, *args, **kwargs):
        if self.image and hasattr(self.image, "url"):
            if self.image.url != "/media/default/slider_holder.jpg":
                self.image.delete()
        super().delete()


# Due Date Calculatore

class DueDateCalculator(models.Model):
    # LMP
    lastMenstrualPeriod = models.DateTimeField()
    cycleLength = models.IntegerField()
    # Conception
    conceiveDate = models.DateTimeField()
    # IVF
    dateOfTransfer = models.DateTimeField()
    numOfDays = models.IntegerField()
    # Ultrasound
    ultrasoundDate = models.DateTimeField()
    weeks = models.IntegerField()
    days = models.IntegerField()
    # Output
    expectedDueDate = models.DateTimeField()
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()

    medicalProfileId = models.ForeignKey(
        MedicalProfile,
        on_delete=models.CASCADE,
        related_name="medicalprofile_duedatecalculator",
    )
    calculationMethodId = models.ForeignKey(
        CalculationMethod,
        on_delete=models.CASCADE,
        related_name="calculationmethod_duedatecalculator",
    )


# Weight Gain

class WeightGain(models.Model):
    height = models.FloatField()
    prePregnancyWeight = models.FloatField()
    currentWeight = models.FloatField()
    currentWeek = models.IntegerField()
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()
    bmiCaseId = models.ForeignKey(
        BMICase, on_delete=models.CASCADE, related_name="bmicase_weightgain"
    )
    medicalProfileId = models.ForeignKey(
        MedicalProfile, on_delete=models.CASCADE, related_name="medicalprofile_weightgain"
    )


# Pregnancy Care Category

class PregnancyCareCategory(models.Model):
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()


class PregnancyCareCategoryLanguage(models.Model):
    title = models.TextField()
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()

    pregnancyCareCategoryId = models.ForeignKey(
        PregnancyCareCategory,
        on_delete=models.CASCADE,
        related_name="pregnancycarecategory_pregnancycarecategorylanguage",
    )
    languageId = models.ForeignKey(
        Language,
        on_delete=models.CASCADE,
        related_name="language_pregnancycarecategorylanguage",
    )


# Pregnancy Care Item

class PregnancyCareItem(models.Model):
    isDo = models.BooleanField()
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()
    pregnancyCareCategoryId = models.ForeignKey(
        PregnancyCareCategory,
        on_delete=models.CASCADE,
        related_name="pregnancycarecategory_pregnancycareitem",
    )


class PregnancyCareItemLanguage(models.Model):
    title = models.TextField()
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()
    pregnancyCareItemId = models.ForeignKey(
        PregnancyCareItem,
        on_delete=models.CASCADE,
        related_name="pregnancycareitem_pregnancycareitemlanguage",
    )
    languageId = models.ForeignKey(
        Language,
        on_delete=models.CASCADE,
        related_name="language_pregnancycareitemlanguage",
    )


#Check Up

class CheckUp(models.Model):
    bloodPressureTop = models.FloatField(default=0)
    bloodPressureBottom = models.FloatField(default=0)
    heartRate = models.FloatField(default=0)
    bloodSugarFasting = models.FloatField(default=0)
    bloodSugarAfterMeal1Hour = models.FloatField(default=0)
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()
    medicalProfileId = models.ForeignKey(
        MedicalProfile,
        on_delete=models.CASCADE,
        related_name="medicalprofile_checkup",
    )

# Pregnancy Shopping

class PregnancyShoppingCategory(models.Model):
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()


class PregnancyShoppingCategoryLanguage(models.Model):
    title = models.TextField()
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()

    pregnancyShoppingCategoryId = models.ForeignKey(
        PregnancyShoppingCategory,
        on_delete=models.CASCADE,
        related_name="pregnancyshoppingcategory_pregnancyshoppingcategorylanguage",
    )
    languageId = models.ForeignKey(
        Language,
        on_delete=models.CASCADE,
        related_name="language_pregnancyshoppingcategorylanguage",
    )


# Pregnany Shopping Item

class PregnancyShoppingItem(models.Model):
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()
    pregnancyShoppingCategoryId = models.ForeignKey(
        PregnancyShoppingCategory,
        on_delete=models.CASCADE,
        related_name="pregnancyshoppingcategory_pregnancyshoppingitem",
    )


class PregnancyShoppingItemLanguage(models.Model):
    title = models.TextField()
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()

    pregnancyShoppingItemId = models.ForeignKey(
        PregnancyShoppingItem,  # per your spec
        on_delete=models.CASCADE,
        related_name="pregnancyshoppingitem_pregnancyshoppingitemlanguage",
    )
    languageId = models.ForeignKey(
        Language,
        on_delete=models.CASCADE,
        related_name="language_pregnancyshoppingitemlanguage",
    )


# Pregnany Shopping Check Item

class PregnancyShoppingCheckItem(models.Model):

    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()
    pregnancyShoppingItemId = models.ForeignKey(
        PregnancyShoppingItem,
        on_delete=models.CASCADE,
        related_name="pregnancyshoppingitem_pregnancyshoppingitem",
    )
    medicalProfileId = models.ForeignKey(
        MedicalProfile,
        on_delete=models.CASCADE,
        related_name="medicalprofile_pregnancyshoppingcheckitem",
    )


# Notes

class Notes(models.Model):
    title = models.TextField()
    description = models.TextField()
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()
    medicalProfileId = models.ForeignKey(
        MedicalProfile,
        on_delete=models.CASCADE,
        related_name="medicalprofile_notes",
    )


# Appointments

class Appointment(models.Model):
    title = models.TextField()
    doctorName = models.TextField()
    speciality = models.TextField()
    note = models.TextField(
        default="",
        null=True,
        blank=True,
    )
    date = models.DateTimeField()
    dateTime = models.DateTimeField()
    isDone = models.BooleanField()
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()
    medicalProfileId = models.ForeignKey(
        MedicalProfile,
        on_delete=models.CASCADE,
        related_name="medicalprofile_appointment",
    )


# Contraction Timer Group

class ContractionTimerGroup(models.Model):
    date = models.DateTimeField()
    note = models.TextField(default='',blank=True,null=True)
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()
    medicalProfileId = models.ForeignKey(
        MedicalProfile,
        on_delete=models.CASCADE,
        related_name="medicalprofile_contractiontimergroup",
    )


# Contraction Timer Row

class ContractionTimerRow(models.Model):
    startAt = models.DateTimeField()
    endAt = models.DateTimeField()
    durationSeconds = models.IntegerField()
    intervalSeconds = models.IntegerField()
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()
    
    contractionTimerGroupId = models.ForeignKey(
        ContractionTimerGroup,
        on_delete=models.CASCADE,
        related_name="contractiontimergroup_contractiontimerrow",
    )

