from django.db import models
import os

basicPlanKeyName = "basic"

def symptom_picture_path(instance, filename):
    return os.path.join(
        "images/symptom_type/" + instance.keyName + "." + "png",
    )


def baby_size_picture_path(instance, filename):
    return os.path.join(
        "images/baby_size/" + instance.keyName + "." + "png",
    )


def pregnancy_week_picture_path(instance, filename):
    return os.path.join(
        "images/pregnancy_week/" + instance.keyName + "." + "png",
    )


# class Employee(models.Model):
#     fullName = models.TextField()
#     email = models.TextField()
#     password = models.CharField()
#     token = models.CharField()
#     createdDate = models.DateTimeField()
#     updatedDate = models.DateTimeField()

#     def __str__(self):
#         return str(self.fullName)

# Start Basic Data

#Token Type
class TokenType(models.Model):
    keyName = models.TextField()
    tokenTypeLen = models.IntegerField(default=27)
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()

#Device Type
class DeviceOSType(models.Model):
    keyName = models.TextField()
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()

#Language
class Language(models.Model):
    name = models.TextField()
    countryCode = models.CharField(max_length=10)
    languageCode = models.CharField(max_length=10)
    isEnabled = models.BooleanField(default=False)
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()

    def __str__(self):
        return str(self.name)

#Gender
class Gender(models.Model):
    keyName = models.TextField()


class GenderLanguage(models.Model):
    name = models.TextField()
    genderId = models.ForeignKey(
        Gender,
        on_delete=models.CASCADE,
        related_name="gender_genderlanguage",
    )
    languageId = models.ForeignKey(
        Language,
        on_delete=models.CASCADE,
        related_name="language_genderlanguage",
    )

#Child Type
class ChildType(models.Model):
    keyName = models.TextField()


class ChildTypeLanguage(models.Model):
    name = models.TextField()
    childTypeId = models.ForeignKey(
        ChildType,
        on_delete=models.CASCADE,
        related_name="childtype_childtypelanguage",
    )
    languageId = models.ForeignKey(
        Language,
        on_delete=models.CASCADE,
        related_name="language_childtypelanguage",
    )

#Symptom Type
class SymptomType(models.Model):
    keyName = models.TextField()
    image = models.ImageField(
        upload_to=symptom_picture_path,
        null=True,
        blank=True,
        default="/default/holder.jpg",
        max_length=255,
    )
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()


class SymptomTypeLanguage(models.Model):
    name = models.TextField()
    symptomTypeId = models.ForeignKey(
        SymptomType,
        on_delete=models.CASCADE,
        related_name="symptomtype_symptomtypelanguage",
    )
    languageId = models.ForeignKey(
        Language,
        on_delete=models.CASCADE,
        related_name="language_symptomtypelanguage",
    )


# Kick Tracker Status
class KickTrackerStatus(models.Model):
    keyName = models.TextField()
    count = models.IntegerField()
    color = models.TextField()
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()


class KickTrackerStatusLanguage(models.Model):
    name = models.TextField()
    description = models.TextField()
    kickTrackerStatusId = models.ForeignKey(
        KickTrackerStatus,
        on_delete=models.CASCADE,
        related_name="kicktrackerstatus_kicktrackerstatuslanguage",
    )
    languageId = models.ForeignKey(
        Language,
        on_delete=models.CASCADE,
        related_name="language_kicktrackerstatuslanguage",
    )


# BMI Cases
class BMICaseType(models.Model):
    keyName = models.TextField()
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()


class BMICaseTypeLanguage(models.Model):
    name = models.TextField()
    bmiCaseTypeId = models.ForeignKey(
        BMICaseType,
        on_delete=models.CASCADE,
        related_name="bmicasetype_bmicasetypelanguage",
    )
    languageId = models.ForeignKey(
        Language,
        on_delete=models.CASCADE,
        related_name="language_bmicasetypelanguage",
    )

class BMICase(models.Model):
    keyName = models.TextField()
    min = models.FloatField()
    max = models.FloatField()
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()
    bmiCaseTypeId = models.ForeignKey(
        BMICaseType,
        on_delete=models.CASCADE,
        related_name="bmicasetype_bmicase",
    )


class BMICaseLanguage(models.Model):
    name = models.TextField()
    bmiCaseId = models.ForeignKey(
        BMICase,
        on_delete=models.CASCADE,
        related_name="bmicase_bmicaselanguage",
    )
    languageId = models.ForeignKey(
        Language,
        on_delete=models.CASCADE,
        related_name="language_bmicaselanguage",
    )


class BMICaseWeightGain(models.Model):
    min = models.FloatField()
    max = models.FloatField()
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()
    bmiCaseId = models.ForeignKey(
        BMICase,
        on_delete=models.CASCADE,
        related_name="bmicase_bmicaseweightgain",
    )

#Calculation Method
class CalculationMethod(models.Model):
    keyName = models.TextField()
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()


class CalculationMethodLanguage(models.Model):
    name = models.TextField()
    calculationMethodId = models.ForeignKey(
        CalculationMethod,
        on_delete=models.CASCADE,
        related_name="calculationmethod_calculationmethodlanguage",
    )
    languageId = models.ForeignKey(
        Language,
        on_delete=models.CASCADE,
        related_name="language_calculationmethodlanguage",
    )


# Pregnancy Week

class PregnancyWeek(models.Model):
    id = models.IntegerField(primary_key=True)
    keyName = models.TextField()
    weekNumber = models.IntegerField()
    trimester = models.IntegerField()
    image = models.ImageField(
        upload_to=pregnancy_week_picture_path,
        null=True,
        blank=True,
        default="/default/holder.jpg",
        max_length=255,
    )
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()


class PregnancyWeekLanguage(models.Model):
    fetalDevelopment = models.TextField()
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()
    pregnancyWeekId = models.ForeignKey(
        PregnancyWeek,
        on_delete=models.CASCADE,
        related_name="pregnancyweek_pregnancyweeklanguage",
    )
    languageId = models.ForeignKey(
        Language,
        on_delete=models.CASCADE,
        related_name="language_pregnancyweeklanguage",
    )


# Pregnancy Symptom

class PregnancySymptom(models.Model):
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()
    pregnancyWeekId = models.ForeignKey(
        PregnancyWeek,
        on_delete=models.CASCADE,
        related_name="pregnancyweek_pregnancySymptom",
    )


class PregnancySymptomLanguage(models.Model):
    description = models.TextField()
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()
    pregnancySymptomId = models.ForeignKey(
        PregnancySymptom,
        on_delete=models.CASCADE,
        related_name="pregnancysymptom_pregnancySymptomlanguage",
    )
    languageId = models.ForeignKey(
        Language,
        on_delete=models.CASCADE,
        related_name="language_pregnancySymptomlanguage",
    )


# Pregnancy Checklist

class PregnancyCheckList(models.Model):
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()
    pregnancyWeekId = models.ForeignKey(
        PregnancyWeek,
        on_delete=models.CASCADE,
        related_name="pregnancyweek_pregnancychecklist",
    )


class PregnancyCheckListLanguage(models.Model):
    description = models.TextField()
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()
    pregnancyCheckListId = models.ForeignKey(
        PregnancyCheckList,
        on_delete=models.CASCADE,
        related_name="pregnancychecklist_pregnancychecklistlanguage",
    )
    languageId = models.ForeignKey(
        Language,
        on_delete=models.CASCADE,
        related_name="language_pregnancychecklistlanguage",
    )


# Pregnancy Nutritions

class PregnancyNutrition(models.Model):
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()
    pregnancyWeekId = models.ForeignKey(
        PregnancyWeek,
        on_delete=models.CASCADE,
        related_name="pregnancyweek_pregnancyNutrition",
    )


class PregnancyNutritionLanguage(models.Model):
    description = models.TextField()
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()
    pregnancyNutritionId = models.ForeignKey(
        PregnancyNutrition,
        on_delete=models.CASCADE,
        related_name="pregnancyNutrition_pregnancyNutritionlanguage",
    )
    languageId = models.ForeignKey(
        Language,
        on_delete=models.CASCADE,
        related_name="language_pregnancyNutritionlanguage",
    )


# Pregnancy Baby Size

class PregnancyBabySize(models.Model):
    keyName = models.TextField()
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()
    image = models.ImageField(
        upload_to=baby_size_picture_path,
        null=True,
        blank=True,
        default="/default/holder.jpg",
        max_length=255,
    )
    pregnancyWeekId = models.ForeignKey(
        PregnancyWeek,
        on_delete=models.CASCADE,
        related_name="pregnancyweek_pregnancybabysize",
    )


class PregnancyBabySizeLanguage(models.Model):
    description = models.TextField()
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()
    pregnancyBabySizeId = models.ForeignKey(
        PregnancyBabySize,
        on_delete=models.CASCADE,
        related_name="pregnancybabysize_pregnancybabysizelanguage",
    )
    languageId = models.ForeignKey(
        Language,
        on_delete=models.CASCADE,
        related_name="language_pregnancybabysizelanguage",
    )


# MonthlyTip

class MonthlyTip(models.Model):
    monthNumber = models.IntegerField()
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()


class MonthlyTipLanguage(models.Model):
    title = models.TextField()
    description = models.TextField()
    inspiration = models.TextField()
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()
    monthlyTipId = models.ForeignKey(
        MonthlyTip,
        on_delete=models.CASCADE,
        related_name="monthlytip_monthlytiplanguage",
    )
    languageId = models.ForeignKey(
        Language,
        on_delete=models.CASCADE,
        related_name="language_monthlytiplanguage",
    )


# Tip
class Tip(models.Model):
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()
    monthlyTipId = models.ForeignKey(
        MonthlyTip,
        on_delete=models.CASCADE,
        related_name="monthlytip_tip",
    )


class TipLanguage(models.Model):
    description = models.TextField()
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()
    tipId = models.ForeignKey(
        Tip,
        on_delete=models.CASCADE,
        related_name="tip_tiplanguage",
    )
    languageId = models.ForeignKey(
        Language,
        on_delete=models.CASCADE,
        related_name="language_tiplanguage",
    )


# FAQ

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


class FAQCategoryLanguage(models.Model):
    title = models.TextField()
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()
    faqCategoryId = models.ForeignKey(
        FAQCategory,
        on_delete=models.CASCADE,
        related_name="faqcategory_faqcategorylanguage",
    )
    languageId = models.ForeignKey(
        Language,
        on_delete=models.CASCADE,
        related_name="language_faqcategorylanguage",
    )


class FAQ(models.Model):
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()
    faqCategoryId = models.ForeignKey(
        FAQCategory,
        on_delete=models.CASCADE,
        related_name="faqcategory_faq",
    )


class FAQLanguage(models.Model):
    question = models.TextField()
    answer = models.TextField()
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()
    faqId = models.ForeignKey(
        FAQ,
        on_delete=models.CASCADE,
        related_name="faq_faqlanguage",
    )
    languageId = models.ForeignKey(
        Language,
        on_delete=models.CASCADE,
        related_name="language_faqlanguage",
    )

#Check Up Status

class CheckUpStatus(models.Model):
    level = models.TextField()
    minSystolic = models.FloatField(default=0)
    maxSystolic = models.FloatField(default=0)
    minDiastolic = models.FloatField(default=0)
    maxDiastolic = models.FloatField(default=0)
    minBPM = models.FloatField(default=0)
    maxBPM = models.FloatField(default=0)
    minMGDL = models.FloatField(default=0)
    maxMGDL = models.FloatField(default=0)
    bloodSugarType = models.TextField(default="")
    flag = models.TextField()
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()


class CheckUpStatusLanguage(models.Model):
    title = models.TextField()
    description = models.TextField()
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()
    checkUpStatusId = models.ForeignKey(
        CheckUpStatus,
        on_delete=models.CASCADE,
        related_name="checkupstatus_checkupstatuslanguage",
    )
    languageId = models.ForeignKey(
        Language,
        on_delete=models.CASCADE,
        related_name="language_checkupstatuslanguage",
    )

#Subscription Plan

class SubscriptionPlan(models.Model):
    keyName = models.TextField(default='')
    price = models.FloatField(default=0)
    isRecommended = models.BooleanField(default=False)
    isUnLimited = models.BooleanField(default=False)
    isAllowAdding = models.BooleanField(default=False)
    addingRecordCount = models.IntegerField(default=0)
    isAllowEditing = models.BooleanField(default=False)
    isAllowDeleting = models.BooleanField(default=False)
    isAllowReading = models.BooleanField(default=False)
    isAllowPaging = models.BooleanField(default=False)
    isAllowAIAssist = models.BooleanField(default=False)
    isDefault = models.BooleanField(default=False)
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()

class SubscriptionPlanLanguage(models.Model):
    title = models.TextField()
    description = models.TextField()
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()
    subscriptionPlanId = models.ForeignKey(
        SubscriptionPlan,
        on_delete=models.CASCADE,
        related_name="subscriptionplan_subscriptionplanlanguage",
    )
    languageId = models.ForeignKey(
        Language,
        on_delete=models.CASCADE,
        related_name="language_subscriptionplanlanguage",
    )

#Subscription Plan Detail

class SubscriptionPlanDetail(models.Model):
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()
    subscriptionPlanId = models.ForeignKey(
        SubscriptionPlan,
        on_delete=models.CASCADE,
        related_name="subscriptionplan_subscriptionplandetail",
    )

class SubscriptionPlanDetailLanguage(models.Model):
    description = models.TextField()
    createdDate = models.DateTimeField()
    updatedDate = models.DateTimeField()
    subscriptionPlanDetailId = models.ForeignKey(
        SubscriptionPlanDetail,
        on_delete=models.CASCADE,
        related_name="subscriptionplandetail_subscriptionplandetaillanguage",
    )
    languageId = models.ForeignKey(
        Language,
        on_delete=models.CASCADE,
        related_name="language_subscriptionplandetaillanguage",
    )

