from locale import currency
from django.db import models
from django.contrib.auth.models import User
from django.contrib.postgres.fields import ArrayField
from django import forms
import jsonfield
import uuid
import os
import time
import datetime
from numpy import size
from pytz import timezone

# Create your models here.


class MNFScriptDatabase(models.Model):
    user_id = models.ForeignKey(User, on_delete=models.CASCADE)
    date_at = models.DateTimeField(auto_now=True)
    script_id = models.CharField(max_length=100, blank=True)
    script_title = models.CharField(max_length=100, blank=True)
    author_name = models.CharField(max_length=100, blank=True)
    actionline_language = models.CharField(max_length=100, blank=True)
    actionline_script_language = models.CharField(max_length=100, blank=True)
    dialogues_language = models.CharField(max_length=100, blank=True)
    dialogues_script_language = models.CharField(max_length=100, blank=True)
    # genre = models.CharField(max_length=100, blank=True)
    document_name = models.CharField(max_length=225)
    script = models.FileField(upload_to="scripts/")
    pitchdeck_item = models.CharField(default="", max_length=100)
    script_file_path = models.CharField(default="", max_length=100)
    scene_vector = models.CharField(default="", max_length=100)
    character_vector = models.CharField(default="", max_length=100)
    dialogues_vector = models.CharField(default="", max_length=100)
    script_vector = models.CharField(default="", max_length=100)
    Location_Vector = models.CharField(default="", max_length=100)
    Global_Vector = models.CharField(default="", max_length=100)
    script_file_pdf_path = models.CharField(default="", max_length=100)
    narration_video_path = models.CharField(default="", max_length=100)
    character_intro_video_path = models.CharField(default="", max_length=100)
    line_by_line_narration_video_path = models.CharField(
        default="", max_length=100
    )  # rohit edited on 26th December #1
    linebyline = models.CharField(default="", max_length=100)
    character_intro = models.CharField(default="", max_length=100)  # 2
    screenplay_analysis = models.CharField(default="", max_length=100)  # 3
    elevator_pitch = models.CharField(default="", max_length=100)  # 4
    onepager = models.CharField(default="", max_length=100)  # 5
    nondial_src_language = models.CharField(max_length=100, blank=True)
    screenplay_analysis_video_path = models.CharField(default="", max_length=100)
    elevator_pitch_video_path = models.CharField(default="", max_length=100)
    onepager_pdf_path = models.CharField(default="", max_length=100)
    dial_src_language = models.CharField(max_length=100, blank=True)
    dial_dest_language = models.CharField(max_length=100, blank=True)
    dial_dest_script = models.CharField(max_length=100, blank=True)
    nondial_dest_language = models.CharField(max_length=100, blank=True)
    nondial_src_script = models.CharField(max_length=100, blank=True)
    dial_src_script = models.CharField(max_length=100, blank=True)
    dual_dial_script = models.CharField(max_length=100, blank=True)
    translated_script_path = models.CharField(default="", max_length=100)
    languages = models.CharField(default="", max_length=100, blank=True)
    forWhat = models.CharField(default="", max_length=100, blank=True)
    numPages = models.IntegerField(default=1)
    payment_intent_id = models.CharField(default="", max_length=256)

    def __str__(self):
        return self.script_id


RATING_CHOICES = (
    ("1", "1"),
    ("1.5", "1.5"),
    ("2", "2"),
    ("2.5", "2.5"),
    ("3", "3"),
    ("3.5", "3.5"),
    ("4", "4"),
    ("4.5", "4.5"),
    ("5", "5"),
)


class Author(models.Model):
    uuid = models.UUIDField(
        max_length=36, primary_key=True, default=uuid.uuid4, editable=False
    )
    name = models.CharField(max_length=100, blank=True)
    author_profile = models.FileField(upload_to="profile_pic/", blank=True, null=True)
    author_about = models.CharField(max_length=100, blank=True)
    author_email = models.CharField(default="", max_length=100)
    phonenumber = models.CharField(default="", max_length=100)
    author_link = models.CharField(default="", max_length=100)


class PitchVector(models.Model):
    # choosescript = models.FileField(upload_to='scripts/', blank=True, null=True)
    # pitchdeck = models.CharField(max_length=100, blank=True)
    scriptDetails = models.ForeignKey(MNFScriptDatabase, on_delete=models.CASCADE)
    script_id=models.CharField(max_length=100,blank=True)
    scriptname = models.CharField(max_length=100, blank=True)
    genre = models.CharField(max_length=100, blank=True)
    subGenre = models.CharField(max_length=100, blank=True)
    projecttype = models.CharField(max_length=100, blank=True)
    noepisodes = models.CharField(max_length=100, blank=True)
    eachepisodes = models.CharField(max_length=100, blank=True)
    other = models.CharField(max_length=100, blank=True)
    language = models.CharField(max_length=100, blank=True)
    platformproposed = models.CharField(max_length=100, blank=True)
    country = models.CharField(max_length=100, blank=True)
    state = models.CharField(max_length=100, blank=True)
    city = models.CharField(max_length=100, blank=True)
    languagebelt = models.CharField(max_length=100, blank=True)
    target_audience = models.CharField(max_length=100, blank=True)
    target_field = models.CharField(max_length=100, blank=True)
    timeperiod = models.CharField(max_length=100, blank=True)
    geography = models.CharField(max_length=100, blank=True)
    dialogue_reference = models.CharField(max_length=100, blank=True)
    premise = models.CharField(max_length=100, blank=True)
    logline = models.CharField(max_length=100, blank=True)
    # Author details
    # author_details = ArrayField(ArrayField(models.CharField(max_length=20, null=True, blank=True),size=5, default=list),size=5, default=list)
    #auth_details = jsonfield.JSONField()
    author_details = models.ManyToManyField(
        Author,
        related_name="author_details",
        default="",
        null=True,
        blank=True,
    )
    author = models.BooleanField(default=False)
    author1 = models.CharField(max_length=100, blank=True)
    name = models.CharField(max_length=100, blank=True)
    author_profile = models.FileField(upload_to="profile_pic/", blank=True, null=True)
    author_about = models.CharField(max_length=100, blank=True)
    author_email = models.CharField(default="", max_length=100)
    phonenumber = models.CharField(default="", max_length=100)
    author_link = models.CharField(default="", max_length=100)

    # Plot and story flow
    plot_story_flow = models.BooleanField(default=False)
    protagonist = models.CharField(max_length=100, blank=True)
    barrier = models.CharField(max_length=100, blank=True)
    midpoint = models.CharField(max_length=100, blank=True)
    climax = models.CharField(max_length=100, blank=True)
    conflictresolved = models.CharField(max_length=100, blank=True)
    minute_protogonist = models.CharField(max_length=100, blank=True)
    conflict_reaches_climax = models.CharField(max_length=100, blank=True)

    # About shooting
    shooting = models.BooleanField(default=False)
    pre_production = models.CharField(max_length=100, blank=True)
    special_preperation = models.CharField(max_length=100, blank=True)
    days_shoot_required = models.CharField(max_length=100, blank=True)
    percentage_location = models.CharField(max_length=100, blank=True)
    percentage_scene = models.CharField(max_length=100, blank=True)
    major_prosthetic = models.CharField(max_length=100, blank=True)
    during_production = models.CharField(max_length=100, blank=True)

    # Dream cast $ locations
    dream_cast_locations = models.BooleanField(default=False)
    leadcharacter = models.CharField(max_length=100, blank=True)
    proposedactor1 = models.CharField(max_length=100, blank=True)
    upload_image1 = models.FileField(upload_to="profile_pic/", blank=True, null=True)
    secondleadcharacter = models.CharField(max_length=100, blank=True)
    proposedactor2 = models.CharField(max_length=100, blank=True)
    upload_image2 = models.FileField(upload_to="profile_pic/", blank=True, null=True)
    mainvillan = models.CharField(max_length=100, blank=True)
    proposedactor3 = models.CharField(max_length=100, blank=True)
    upload_image3 = models.FileField(upload_to="profile_pic/", blank=True, null=True)
    associatecharacter = models.CharField(max_length=100, blank=True)
    proposedactor4 = models.CharField(max_length=100, blank=True)
    upload_image4 = models.FileField(upload_to="profile_pic/", blank=True, null=True)
    associatevillan = models.CharField(max_length=100, blank=True)
    proposedactor5 = models.CharField(max_length=100, blank=True)
    upload_image5 = models.FileField(upload_to="profile_pic/", blank=True, null=True)
    firstlocation = models.CharField(max_length=100, blank=True)
    proposedactor6 = models.CharField(max_length=100, blank=True)
    upload_image6 = models.FileField(upload_to="profile_pic/", blank=True, null=True)
    secondlocation = models.CharField(max_length=100, blank=True)
    proposedactor7 = models.CharField(max_length=100, blank=True)
    upload_image7 = models.FileField(upload_to="profile_pic/", blank=True, null=True)
    thirdlocation = models.CharField(max_length=100, blank=True)
    proposedactor8 = models.CharField(max_length=100, blank=True)
    upload_image8 = models.FileField(upload_to="profile_pic/", blank=True, null=True)

    # About Film budget
    film_budget = models.BooleanField(default=False)
    making_expenses = models.CharField(max_length=100, blank=True)
    percentage_scenes_required = models.CharField(max_length=100, blank=True)
    vfx_expenses = models.CharField(max_length=100, blank=True)
    approx_budget_required = models.CharField(max_length=100, blank=True)

    # Strengths & Expectations
    strengths_and_expectation = models.BooleanField(default=False)
    script_succed = models.CharField(max_length=100, blank=True)
    produced_now = models.CharField(max_length=100, blank=True)
    monetary_non_monetary_expectation = models.CharField(max_length=100, blank=True)


class NarrationFeedbackDB(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    Rate_Narration_Service_Experience = models.CharField(
        max_length=100, choices=RATING_CHOICES, default="4.5"
    )
    Rate_Conveying_Of_Plot_Of_Narration = models.CharField(
        max_length=100, choices=RATING_CHOICES, default="4.5"
    )
    Rate_Context_Of_Narration = models.CharField(
        max_length=100, choices=RATING_CHOICES, default="4.5"
    )
    Rate_Pitch_Of_Narration = models.CharField(
        max_length=100, choices=RATING_CHOICES, default="4.5"
    )
    Rate_Conveying_Of_Emotion = models.CharField(
        max_length=100, choices=RATING_CHOICES, default="4.5"
    )
    Voice_That_Need_Attention = models.CharField(max_length=100, default="")
    Errors_Faced_In_Narration = models.CharField(max_length=100, default="")
    Other_Area_Of_Improvement_Narration = models.CharField(max_length=100, default="")
    date_at = models.DateTimeField(auto_now=True)
    Email = models.CharField(max_length=100, null=True, default="")


class ConversionFeedbackDB(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    Rate_Conversion_Service_Experience = models.CharField(
        max_length=100, null=True, choices=RATING_CHOICES, default="4.5"
    )
    Rate_Conveying_Of_Plot_Of_Conversion = models.CharField(
        max_length=100, null=True, choices=RATING_CHOICES, default="4.5"
    )
    Rate_Context_Of_Conversion = models.CharField(
        max_length=100, null=True, choices=RATING_CHOICES, default="4.5"
    )
    Rate_Language_Syntax = models.CharField(
        max_length=100, null=True, choices=RATING_CHOICES, default="4.5"
    )
    Language_That_Need_Attention = models.CharField(
        max_length=100, null=True, default=""
    )
    Errors_Faced_In_Conversion = models.CharField(max_length=100, null=True, default="")
    Other_Area_Of_Improvement_Conversion = models.CharField(
        max_length=100, null=True, default=""
    )
    date_at = models.DateTimeField(auto_now=True)
    Email = models.CharField(max_length=100, null=True, default="")


class Notifications(models.Model):
    user_id = models.ForeignKey(User, on_delete=models.CASCADE)
    date_at = models.DateTimeField(auto_now=True)
    notification = models.CharField(max_length=100, null=True, default="")


class SampleScript(models.Model):
    user_id = models.ForeignKey(User, on_delete=models.CASCADE)
    date_at = models.DateTimeField(auto_now=True)
    script_id = models.CharField(max_length=100, blank=True)
    script_title = models.CharField(max_length=100, blank=True)
    author_name = models.CharField(max_length=100, blank=True)
    actionline_language = models.CharField(max_length=100, blank=True)
    actionline_script_language = models.CharField(max_length=100, blank=True)
    dialogues_language = models.CharField(max_length=100, blank=True)
    dialogues_script_language = models.CharField(max_length=100, blank=True)
    script_file_path = models.CharField(default="", max_length=100)
    script_file_path_pdf = models.CharField(default="", max_length=100)

    dial_src_language = models.CharField(max_length=100, blank=True)
    dial_src_script = models.CharField(max_length=100, blank=True)
    nondial_src_script = models.CharField(max_length=100, blank=True)
    nondial_src_language = models.CharField(max_length=100, blank=True)
    languages = models.CharField(max_length=100, blank=True, default="")
    status = models.CharField(max_length=100, blank=True, default="")

    def __str__(self):
        return self.script_id


# class MNFLPPDDatabase(models.Model):
#     user_id = models.ForeignKey(User, on_delete=models.CASCADE)
#     date_at = models.DateTimeField(auto_now=True)
#     country= models.CharField(max_length=100, blank=True)
#     province = models.CharField(max_length=100, blank=True)
#     city = models.CharField(max_length=100, blank=True)
#     contact = models.CharField(max_length=100, blank=True)
#     countryCode = models.CharField(max_length=100, blank=True)
#     motherTongue = models.CharField(max_length=100, blank=True)
#     fathersMotherTongue = models.CharField(max_length=100, blank=True)
#     mothersMotherTongue = models.CharField(max_length=100, blank=True)
#     firstLanguage = models.CharField(max_length=225)
#     firstLangReason = models.CharField(max_length=100, blank=True)
#     firstLangMedium = models.CharField(max_length=100, blank=True)
#     secondLanguage = models.CharField(max_length=225)
#     secondLangReason = models.CharField(max_length=100, blank=True)
#     secondLangMedium = models.CharField(max_length=100, blank=True)
#     firstLangDegree = models.CharField(max_length=100, blank=True)
#     firstLangAwardedBy = models.CharField(max_length=100, blank=True)
#     secondLangDegree = models.CharField(max_length=100, blank=True)
#     secondLangAwardedBy = models.CharField(max_length=100, blank=True)
#     firstLangDegreeFile= models.FileField(upload_to='folder/')
#     secondLangDegreeFile= models.FileField(upload_to='folder/')
#     isCertificationL1L2 = models.CharField(max_length=100, blank=True)
#     certificationL1L2 = models.CharField(max_length=100, blank=True)
#     certttificationAwardedByL1L2 = models.CharField(max_length=100, blank=True)
#     durationCertificationL1L2 = models.CharField(max_length=100, blank=True)
#     modeCertificationL1L2 = models.CharField(max_length=100, blank=True)
#     certificationFile= models.FileField(upload_to='folder/')
#     certificationL1L2B = models.CharField(max_length=100, blank=True)
#     certttificationAwardedByL1L2B = models.CharField(max_length=100, blank=True)
#     durationCertificationL1L2B = models.CharField(max_length=100, blank=True)
#     modeCertificationL1L2B = models.CharField(max_length=100, blank=True)
#     certificationFileB= models.FileField(upload_to='folder/')
#     expFirstLang = models.CharField(max_length=100, blank=True)
#     expSecondLang = models.CharField(max_length=100, blank=True)
#     scriptWrittenFirstLang = models.CharField(max_length=100, blank=True)
#     scriptWrittenSecondLang = models.CharField(max_length=100, blank=True)
#     scriptWrittenFirstLangFile= models.FileField(upload_to='folder/')
#     scriptWrittenSecondLangFile= models.FileField(upload_to='folder/')
#     scriptWrittenFirstLangLink = models.CharField(max_length=1000, blank=True)
#     scriptWrittenSecondLangLink = models.CharField(max_length=1000, blank=True)
#     noScriptTransFromL1toL2 = models.CharField(max_length=100, blank=True)
#     noScriptTransFromL1toL2Link = models.CharField(max_length=1000, blank=True)
#     noScriptTransFromL2toL1= models.CharField(max_length=100, blank=True)
#     noScriptTransFromL2toL1Link = models.CharField(max_length=1000, blank=True)
#     noArticleTransFromL1toL2 = models.CharField(max_length=100, blank=True)
#     noArticleTransFromL1toL2Link = models.CharField(max_length=1000, blank=True)
#     noArticleTransFromL2toL1= models.CharField(max_length=100, blank=True)
#     noArticleTransFromL2toL1Link = models.CharField(max_length=1000, blank=True)
#     status = models.CharField(max_length=1000, blank=True)

#     score = models.IntegerField(default= 0)


"""
class lpptaskDatabase(models.Model):
    user_id = models.ForeignKey(User, on_delete=models.CASCADE)
    date_at = models.DateTimeField(auto_now=True)
    country= models.CharField(max_length=100, blank=True)
"""


class DisplayScripts(models.Model):
    name = models.CharField(max_length=100, null=True, default="")
    phone = models.CharField(max_length=100, null=True, default="")
    file_name = models.FileField(upload_to="scripts/")
    check_f = models.BooleanField(default=False)
    check_d = models.BooleanField(default=False)
    check_v = models.BooleanField(default=False)


class Contact(models.Model):
    date_at = models.DateTimeField(auto_now=True)
    name = models.CharField(max_length=100, null=True, default="")
    email = models.CharField(max_length=100, null=True, default="")
    enquiry = models.CharField(max_length=10000, null=True, default="")


class Careers(models.Model):
    date_at = models.DateTimeField(auto_now=True)
    firstname = models.CharField(max_length=100, null=True, default="")
    lastname = models.CharField(max_length=100, null=True, default="")
    email = models.CharField(max_length=100, null=True, default="")
    location = models.CharField(max_length=10000, null=True, default="")
    contact = models.CharField(max_length=100, null=True, default="")
    profileLinkedin = models.CharField(max_length=100, null=True, default="")
    portfolioLink = models.CharField(max_length=100, null=True, default="")
    ExtraInfo = models.CharField(max_length=10000, null=True, default="")
    resume = models.FileField(upload_to="resumes/")


class Collaborator(models.Model):
    dateOfReg = models.DateTimeField(auto_now=True)
    Email = models.CharField(max_length=100, blank=True)
    message = models.CharField(max_length=1000, blank=True)
    phone = models.CharField(max_length=100, blank=True)
    name = models.CharField(max_length=100, blank=True)
    checke = models.BooleanField(default=False)


class PageCounterData(models.Model):
    pageview = models.IntegerField(default=0)
    event_pageview = models.IntegerField(default=0)
    newuser_count = models.IntegerField(default=0)
    olduser_count = models.IntegerField(default=0)


class DaywisePageDatas(models.Model):

    Day_id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    pageview = models.IntegerField(default=0)
    event_pageview = models.IntegerField(default=0)
    newuser_count = models.IntegerField(default=0)
    olduser_count = models.IntegerField(default=0)
    date_count = models.DateTimeField(blank=True)


SERVICE_CHOICES = [
    ("Membership-Monthly", "Membership-Monthly"),
    ("Membership-Annual", "Membership-Annual"),
    ("Membership- Life", "Membership- Life"),
    ("Conversion", "Conversion"),
    ("Narration-LineBYLine", "Narration-LineBYLine"),
    ("Narration-Subtitling", "Narration-Subtitling"),
    ("Gift", "Gift"),
]
PAYMENT_METHOD = [
    ("card", "card"),
    ("UPI", "UPI"),
    ("netbanking", "netbanking"),
    ("wallet", "wallet"),
]
PAYMENT_RESULT = [("pass", "pass"), ("fail", "fail")]
GATEWAY = [("razorPay", "reazorPay"), ("Stripe", "Stripe")]


class PaymentData(models.Model):
    uuid = models.UUIDField(
        max_length=36, primary_key=True, default=uuid.uuid4, editable=False
    )
    date = models.DateField(auto_now=True)
    payment_id = models.CharField(max_length=64)
    user_id = models.ForeignKey(User, on_delete=models.CASCADE)
    services_used = models.CharField(
        null=True, blank=True, choices=SERVICE_CHOICES, max_length=30
    )
    script_info = models.ForeignKey(MNFScriptDatabase, on_delete=models.CASCADE)
    number_of_pages = models.IntegerField(null=True, blank=True)
    total_amount = models.FloatField(null=True, blank=True)
    discount = models.FloatField(null=True, blank=True)
    amount_charged = models.FloatField(null=True, blank=True)
    gateway_fee = models.FloatField(null=True, blank=True)
    currency = models.CharField(default="INR", max_length=30)
    pay_method = models.CharField(
        null=True, blank=True, choices=PAYMENT_METHOD, max_length=12
    )
    payment_status = models.CharField(
        null=True, blank=True, choices=PAYMENT_RESULT, max_length=5
    )
    payment_gateway = models.CharField(
        null=True, blank=True, choices=GATEWAY, max_length=10
    )

    def __str__(self):
        return self.user_id