from django.db import models
from django.contrib.auth.models import User
from mnfapp.models import ScriptTranslations
# from conversion.models import pptconversion
# from subtitling3.models import Videoes
import os
import time
import datetime
import uuid
from MNF.settings import BasePath
basePath = BasePath()
from pathlib import Path

stat = (
    ("actionline_inprogress", "actionline_inprogress"),
    ("dialogue_inprogress", "dialogue_inprogress"),
    ("actionline_completed", "actionline_completed"),
    ("dialogue_completed", "dialogue_completed"),
    ("actionline_lppassigned", "actionline_lppassigned"),
    ("dialogue_lppassigned", "dialogue_lppassigned"),
    ("completed", "completed"),
    ("hold", "hold"),
    ("no_action_taken_bylpp", "no_action_taken_bylpp"),
    ("none_available_action", "none_available_action"),
    ("none_available_dialogue", "none_available_dialogue"),
    ("none_available_lpp", "none_available_lpp"),
    ("subtitle_vetting_inprogress", "subtitle_vetting_inprogress"),
    ("subtitle_lppassigned", "subtitle_lppassigned"),
    ("subtitle_completed", "subtitle_completed"),
)

gen_from = (
    ("conversion", "conversion"),
    ("onepager", "onepager"),
    ("subtitling", "subtitling"),
)


def get_file_path(instance, filename):
    master_folder = str(instance.lpp_id)
    address = "lpp_documents/" + str(master_folder)
    final_path = basePath + "/media/" + address
    if not Path(final_path).exists():
        os.mkdir(final_path)
    address = "lpp_documents/" + str(master_folder) + "/"
    return os.path.join(address, filename)


class MNFLPPDDatabase(models.Model):
    lpp_id = models.UUIDField(
        primary_key=True, default=uuid.uuid4, editable=False)
    user_id = models.ForeignKey(
        User, on_delete=models.CASCADE, default="", blank=True, null=True
    )
    date_at = models.DateField(auto_now_add=True)
    approved_on = models.DateField(null=True, blank=True)
    first_name = models.CharField(max_length=100, null=True, blank=True)
    last_name = models.CharField(max_length=100, null=True, blank=True)
    lpp_email = models.CharField(max_length=100, null=True, blank=True)
    country = models.CharField(max_length=100, null=True, blank=True)
    province = models.CharField(max_length=100, null=True, blank=True)
    city = models.CharField(max_length=100, null=True, blank=True)
    contact = models.CharField(max_length=100, null=True, blank=True)
    countryCode = models.CharField(max_length=100, null=True, blank=True)
    motherTongue = models.CharField(max_length=100, null=True, blank=True)
    fathersMotherTongue = models.CharField(
        max_length=100, null=True, blank=True)
    mothersMotherTongue = models.CharField(
        max_length=100, null=True, blank=True)
    firstLanguage = models.CharField(
        max_length=225,
        null=True,
    )
    choice11 = models.BooleanField(default=False)
    choice12 = models.BooleanField(default=False)
    choice13 = models.BooleanField(default=False)
    choice14 = models.BooleanField(default=False)
    firstLangMedium = models.CharField(max_length=100, null=True, blank=True)
    firstlangDialect = models.CharField(max_length=200, null=True, blank=True)
    firstlangaccent = models.CharField(max_length=200, null=True, blank=True)
    secondLanguage = models.CharField(max_length=225, null=True)
    choice21 = models.BooleanField(default=False)
    choice22 = models.BooleanField(default=False)
    choice23 = models.BooleanField(default=False)
    choice24 = models.BooleanField(default=False)
    secondLangMedium = models.CharField(max_length=200, null=True, blank=True)
    secondlangDialect = models.CharField(max_length=200, null=True, blank=True)
    secondlangaccent = models.CharField(max_length=200, null=True, blank=True)
    scripts = models.CharField(max_length=100, null=True, blank=True)

    firstLangDegree = models.CharField(max_length=100, null=True, blank=True)
    firstLangAwardedBy = models.CharField(
        max_length=100, null=True, blank=True)
    firstLangDegreeFile = models.FileField(
        upload_to=get_file_path,
        null=True,
    )
    secondLangDegree = models.CharField(max_length=100, null=True, blank=True)
    secondLangAwardedBy = models.CharField(
        max_length=100, null=True, blank=True)
    secondLangDegreeFile = models.FileField(
        upload_to=get_file_path,
        null=True,
    )

    certificationL1L2 = models.CharField(max_length=100, null=True, blank=True)
    certttificationAwardedByL1L2 = models.CharField(
        max_length=100, null=True, blank=True
    )
    durationCertificationL1L2 = models.CharField(
        max_length=100, null=True, blank=True)
    modeCertificationL1L2 = models.CharField(
        max_length=100, null=True, blank=True)
    certificationFile = models.FileField(
        upload_to=get_file_path,
        null=True,
    )

    # certificationL1L2B = models.CharField(max_length=100, null=True, blank=True)
    # certttificationAwardedByL1L2B = models.CharField(max_length=100, null=True, blank=True)
    # durationCertificationL1L2B = models.CharField(max_length=100, null=True, blank=True)
    # modeCertificationL1L2B = models.CharField(max_length=100, null=True, blank=True)
    # certificationFileB = models.FileField(upload_to="folder/",null=True,)

    expFirstLang = models.CharField(max_length=100, null=True, blank=True)
    expSecondLang = models.CharField(max_length=100, null=True, blank=True)
    scriptWrittenFirstLang = models.CharField(
        max_length=100, null=True, blank=True)
    scriptWrittenFirstLangLink = models.CharField(
        max_length=1000, null=True, blank=True
    )
    scriptWrittenSecondLang = models.CharField(
        max_length=100, null=True, blank=True)
    scriptWrittenSecondLangLink = models.CharField(
        max_length=1000, null=True, blank=True
    )
    noScriptTransFromL1toL2 = models.CharField(
        max_length=100, null=True, blank=True)
    noScriptTransFromL1toL2Link = models.CharField(
        max_length=1000, null=True, blank=True
    )
    noScriptTransFromL2toL1 = models.CharField(
        max_length=100, null=True, blank=True)
    noScriptTransFromL2toL1Link = models.CharField(
        max_length=1000, null=True, blank=True
    )
    noArticleTransFromL1toL2 = models.CharField(
        max_length=100, null=True, blank=True)
    noArticleTransFromL1toL2Link = models.CharField(
        max_length=1000, null=True, blank=True
    )
    noArticleTransFromL2toL1 = models.CharField(
        max_length=100, null=True, blank=True)
    noArticleTransFromL2toL1Link = models.CharField(
        max_length=1000, null=True, blank=True
    )

    status = models.CharField(max_length=1000, null=True, blank=True)
    foreigndetails = models.CharField(max_length=2000, null=True, blank=True)
    bankname = models.CharField(max_length=1000, null=True, blank=True)
    accountno = models.CharField(max_length=1000, null=True, blank=True)
    ifsccode = models.CharField(max_length=1000, null=True, blank=True)
    nameofaccount = models.CharField(max_length=1000, null=True, blank=True)
    availabity = models.BooleanField(default=True)
    nda = models.FileField(
        upload_to=get_file_path,
        null=True,
    )
    score = models.IntegerField(
        default=0,
        null=True,
    )
    level = models.CharField(max_length=100, null=True,
                             default="Beginner", blank=True)
    rank = models.IntegerField(default=0, null=True)
    rating = models.IntegerField(default=0, null=True)
    date_selection = models.DateField(null=True)
    date_last_task_assigned = models.DateField(null=True)
    date_last_task_completion = models.DateField(null=True)
    no_task_completed = models.IntegerField(default=0, null=True)
    no_task_rejected = models.IntegerField(default=0, null=True)
    lpp_task_balance = models.DecimalField(
        default=0.0, max_digits=10, decimal_places=2)
    lpp_withdraw_request = models.BooleanField(default=False)
    lpp_withdraw_amount = models.DecimalField(
        default=0.0, max_digits=10, decimal_places=2)

class LPPTASKDatabase(models.Model):

    task_id = models.UUIDField(
        primary_key=True, default=uuid.uuid4, editable=False)
    user_id = models.ForeignKey(User, on_delete=models.CASCADE)
    date_at = models.DateTimeField(
        auto_now_add=True,
        null=True,
    )
    date_task_assigned = models.DateTimeField(
        null=True,
        blank=True
    )
    usernote = models.CharField(max_length=500, null=True, default="")
    generated_from = models.CharField(
        max_length=300, choices=gen_from, null=True, blank=True
    )  # conversion, sub-1, sub-2, onepager
    possiblelpp_action = models.ManyToManyField(
        MNFLPPDDatabase, related_name="possiblelpps_action", default="", blank=True
    )
    assignedlpp_action = models.ForeignKey(
        MNFLPPDDatabase,
        on_delete=models.SET_DEFAULT,
        related_name="assignedlpp_action",
        default="",
        blank=True,
        null=True,
    )
    eligiblelpp_action = models.ManyToManyField(
        MNFLPPDDatabase, related_name="eligiblelpp_action", null=True, default=""
    )
    lppacceptancetime_action = models.DateTimeField(null=True)
    deadlinetolpp_action = models.DateTimeField(null=True)
    completiontime_action = models.DateTimeField(null=True)
    ratingonmachinetranslation_action = models.IntegerField(
        default=0, null=True)
    mistakeperpage_action = models.CharField(
        max_length=50, null=True, default="")
    paymentstatus_action = models.BooleanField(default=False)
    amoutgiventolpp_action = models.CharField(
        max_length=50, null=True, default="")
    amoutgiventolpp_curr_action = models.CharField(
        max_length=100, null=True, default="")

    possiblelpp_dialogue = models.ManyToManyField(
        MNFLPPDDatabase, related_name="possiblelpps_dialogue", default="", blank=True
    )
    assignedlpp_dialogue = models.ForeignKey(
        MNFLPPDDatabase,
        on_delete=models.SET_DEFAULT,
        related_name="assignedlpp_dialogue",
        default="",
        blank=True,
        null=True,
    )
    eligiblelpp_dialogue = models.ManyToManyField(
        MNFLPPDDatabase, related_name="eligiblelpp_dialogue", null=True, default=""
    )
    lppacceptancetime_dialogue = models.DateTimeField(null=True)
    deadlinetolpp_dialogue = models.DateTimeField(null=True)
    completiontime_dialogue = models.DateTimeField(null=True)
    ratingonmachinetranslation_dialogue = models.IntegerField(
        default=0, null=True)
    mistakeperpage_dialogue = models.CharField(
        max_length=50, null=True, default="")
    paymentstatus_dialogue = models.BooleanField(default=False)
    amoutgiventolpp_dialogue = models.CharField(
        max_length=50, null=True, default="")
    amoutgiventolpp_curr_dialogue = models.CharField(
        max_length=100, null=True, default="")

    totalmodifications = models.IntegerField(default=0, null=True)
    lpp_action_comment = models.CharField(
        max_length=1000, null=True, default="")
    lpp_dialogue_comment = models.CharField(
        max_length=1000, null=True, default="")
    totalamout = models.IntegerField(default=0, null=True)
    totalamout_curr = models.CharField(max_length=100, null=True, default="")
    status = models.CharField(
        max_length=300, choices=stat, null=True, blank=True, default=""
    )
    translated_script = models.ForeignKey(
        ScriptTranslations, on_delete=models.CASCADE, default="", unique=True,blank=True, null=True
    )
    # translated_ppt = models.ForeignKey(
    #     pptconversion, on_delete=models.CASCADE, default="",unique=True, blank=True, null=True
    # )
    # translated_subtitle = models.ForeignKey(
    #     Videoes, on_delete=models.CASCADE, default="", blank=True, null=True
    # )
    # translated_onepager = models.ForeignKey(OnePager_translations)

    outputfile = models.FileField(
        upload_to="lpptaskfolder/", null=True, max_length=200)
    sub_video_id = models.CharField(max_length=50, null=True, default="")
    video_file_path = models.FileField(
        upload_to="lpptaskfolder/", null=True, max_length=200
    )
    lpp_invoice_action = models.CharField(
        max_length=300, null=True, default="")
    lpp_invoice_dialogue = models.CharField(
        max_length=300, null=True, default="")
    sub_src_srt_id = models.CharField(max_length=50, null=True, default="")
    sub_tar_srt_id = models.CharField(max_length=50, null=True, default="")

    class Meta:
        ordering = ['date_at']

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