from lpp.views import task_assigner
import re
from mnfapp.models import MNFScriptDatabase
from mnfapp.models import SampleScript, PaymentData

# from mnfapp.views import PaymentDetails
from scriptAudit.script_audit_codes.script_audit import do_script_audit
from payment.models import conversionPayment, privilegedUser1
from forex_python.converter import CurrencyRates
from mnfapp.models import *
from users.models import *
import stripe
from django.shortcuts import redirect
from PyPDF2 import PdfFileReader
from .forms import CScript
from .models import UploadScript, StoryConversion
from MNF.settings import BasePath
import subprocess
from django.shortcuts import render
from django.contrib.auth.decorators import login_required
from .detection import getInputs
import random
from subprocess import Popen

# from conversion.translation import final_translation
from conversion.translation.twostepconversion import translate_function
from mnfapp.models import MNFScriptDatabase, Notifications
from page_script.models import MNFScriptDatabase_2, Conversions, Conversion_link
from django.contrib.auth.decorators import login_required
from pymongo import MongoClient
from django.core.mail import EmailMessage
from django.conf import settings
from django.http import HttpResponse, JsonResponse, HttpResponseRedirect
from pathlib import Path
from django.core.files.storage import FileSystemStorage
from django.core.mail import EmailMultiAlternatives
from django.template.loader import render_to_string
from django.utils.html import strip_tags
import os
import datetime
import razorpay
from pytz import timezone
from django.contrib.auth.models import User
from lpp.models import LPPTASKDatabase
BASE_DIR = Path(__file__).resolve().parent.parent

# Create your views here.
# Create your views here.
basePath = BasePath()
# Create your views here.
#


# This is your real test secret API key.
# stripe.api_key = "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"
# stripe.api_key = "sk_test_51JT8ahSF9vzGWnggJT1M69LDT0Q8tCqvHzuWd9Fih5YO2guIpMpUd58swbDrJYocpQZAn3nY8k3Ymyw8QZ8dLeEF00VxfBmMWI"
stripe.api_key = settings.STRIPE_SECRET_KEY
# STRIPE_PUB_KEY ="pk_test_51JT8ahSF9vzGWngg9ik0jueTIilHhCQomixBFOiNzCuo4Wwc5oRm73d05vdcboMgNwhyNcNTa2si8idqbB5msvwe006q3S96tM"
# STRIPE_PUB_KEY ="pk_live_51JT8ahSF9vzGWngg4N8fwhTPk5jq8fqBFdokqSMe7AVaOvH6BdyTwAfAoY79qkeJTFA0OdT5qkAk2FCNWCu6W9l000STNnHa7H"
STRIPE_PUB_KEY = settings.STRIPE_PUBLISHABLE_KEY
keyID = settings.RAZORPAY_KEY_ID
keySecret = settings.RAZORPAY_KEY_SECRET
languages = {
    "hi": "Hindi",
    "en": "English",
    "ur": "Urdu",
    "ar": "Arabic",
    "bn": "Bengali",
    "kn": "Kannada",
    "ta": "Tamil",
    "bg": "Bulgarian",
    "bn": "Bengali",
    "ml": "Malayalam",
    "ru": "Russian",
    "sr": "Serbian",
    "uk": "Ukranian",
    "hr": "Croatian",
    "ga": "Irish",
    "sq": "Albanian",
    "mr": "Marathi",
    "fa": "Persian",
    "te": "Telugu",
    "tr": "Turkish",
    "hu": "Hungarian",
    "it": "Italian",
    "ro": "Romanian",
    "pa": "Punjabi",
    "gu": "Gujarati",
    "or": "Oriya",
    "zh-CN": "Chinese-Simplified",
    "zh-TW": "Chinese-Traditional",
    "ne": "Nepali",
    "fr": "French",
    "es": "Spanish",
    "id": "Indonesian",
    "el": "Greek",
    "ja": "Japanese",
    "jv": "Javanese",
    "ko": "Korean",
    "be": "Belarusian",
    "uz": "Uzbek",
    "sd": "Sindhi",
    "af": "Afrikaans",
    "de": "German",
    "is": "Icelandic",
    "ig": "Igbo",
    "la": "Latin",
    "pt": "Portugese",
    "my": "Myanmar",
    "th": "Thai",
    "su": "Sundanese",
    "lo": "Lao",
    "am": "amharic",
    "si": "Sinhala",
    "az": "Azerbaijani",
    "kk": "Kazakh",
    "mk": "Macedonian",
    "bs": "Bosnian",
    "ps": "Pashto",
    "mg": "Malagasy",
    "ms": "Malay",
    "yo": "Yoruba",
    "cs": "Czech",
    "da": "Danish",
    "nl": "Dutch",
    "tl": "Tagalog",
    "no": "Norwegian",
    "sl": "Slovenian",
    "sv": " Swedish",
    "vi": "Vietnamese",
    "cy": "Welsh",
    "he": "Hebrew",
    "hy": "Armenian",
    "km": "Khmer",
    "ka": "Georgian",
    "mn": "Mongolian",
    "ku": "Kurdish",
    "ky": "Kyrgyz",
    "tk": "Turkmen",
    "fi": "Finnish",
    "ht": "Haitian Creole",
    "haw": "Hawaiian",
    "lt": "Lithuanian",
    "lb": "Luxembourgish",
    "mt": "Maltese",
    "pl": "Polish",
    "eo": "Esperanto",
    "tt": "Tatar",
    "ug": "Uyghur",
    "ha": "Hausa",
    "so": "Somali",
    "sw": "Swahili",
    "yi": "Yiddish",
    "eu": "Basque",
    "ca": "Catalan",
    "ceb": "Cebuano",
    "co": "Corsican",
    "et": "Estonian",
    "fy": "Frisian",
    "gl": "Galician",
    "hmn": "Hmong",
    "rw": "Kinyarwanda",
    "lv": "Latvian",
    "mi": "Maori",
    "sm": "Samoan",
    "gd": "Scots Gaelic",
    "st": "Sesotho",
    "sn": "Shona",
    "sk": "Slovak",
    "xh": "Xhosa",
    "zu": "Zulu",
}


def convert_to_pdf(input_docx, out_folder):
    p = subprocess.Popen(
        [
            "libreoffice",
            "--headless",
            "--convert-to",
            "pdf",
            "--outdir",
            out_folder,
            input_docx,
        ]
    )
    print(["--convert-to", "pdf", input_docx])
    p.communicate()


def countPages(docfile, pdfname):
    convert_to_pdf(docfile, rf"{basePath}/media/PdfFiles/")

    pdf = PdfFileReader(open(rf"{basePath}/media/PdfFiles/{pdfname}", "rb"))
    number_of_pages = pdf.getNumPages()
    return number_of_pages


def conversion(request):
    print("************************************777777777777777777777888888888888888888889999999999999999999---------------")
    print("Entered ConversionFunction")
    number = ReferUser.objects.filter(reffered_by=request.user).count()
    #  print(funcname)
    M = MNFScriptDatabase()

    sampleList = SampleScript.objects.all()
    MyURL = ""
    dial_src_script = ""
    dial_src_lang = ""
    non_dial_src_lang = ""
    non_dial_src_script = ""
    script_title = ""
    author_name = ""
    numPages = 0
    option3 = ""
    option4 = ""
    option5 = ""
    option6 = ""
    context = {}
    UScript = CScript()
    id = ""
    x = datetime.datetime.now(timezone("UTC")).astimezone(
        timezone("Asia/Kolkata"))
    # print("MY base path is " ,str(BASE_DIR))
    UploadedScript = UploadScript()
    if request.method == "POST":
        y = Conversion_link()

        M.script = request.FILES["script"]
        M.save()
        MyURL = M.script.url

        # UScript = CScript(request.POST, request.FILES)
        # if UScript.is_valid():
        #     UploadedScript.script = UScript.cleaned_data.get("script")
        #     MyURL = UploadedScript.script.url
        print(MyURL)
        # UploadedScript.save()
        # script_title = MyURL[7:-5] + str(x.strftime("%d"))+ "_"+ str(x.strftime("%b"))+ "_"+ str(x.strftime("%H"))+ str(x.strftime("%I"))
        author_name = str(request.user.username)
        script_title = M.script.name
        # script_title = script_title[8:]
        if script_title[-3:] == "pdf":
            print(do_script_audit(basePath + MyURL, "1234", "scripts"))
            pdf = PdfFileReader(open(rf"{basePath}/{MyURL}", "rb"))
            numPages = pdf.getNumPages()
            # MyURL = MyURL[:-3]+"docx"
        else:
            numPages = countPages(
                str(BASE_DIR) + "/media/" +
                script_title, script_title[8:-4] + "pdf"
            )

            MyURL = MyURL.replace(".pdf", ".docx")
            formInput = getInputs(str(BASE_DIR) + MyURL)
            dial_src_script = formInput[2]
            dial_src_lang = formInput[1]
            non_dial_src_lang = formInput[0]
            non_dial_src_script = formInput[3]
            option3 = formInput[4]
            option4 = formInput[5]
            option5 = formInput[6]
            option6 = formInput[7]
            print("The Data of formInput is:", formInput)
            print("done")
            context = {
                "id": M.id,
                "numPages": numPages,
                "fileName": MyURL,
                "non_dial_src_script": non_dial_src_script,
                "author_name": author_name,
                "script_title": script_title,
                "UScript": UScript,
                "dial_src_script": dial_src_script,
                "dial_src_lang": dial_src_lang,
                "dial_src_lang_full": languages.get(dial_src_lang),
                "non_dial_src_lang_full": languages.get(non_dial_src_lang),
                "non_dial_src_lang": non_dial_src_lang,
                "list": sampleList,
                "option3": option3,
                "option4": option4,
                "option5": option5,
                "option6": option6,
                "number": number,
            }

        return render(request, "conversion/conversion.html", context)
    return render(request, "conversion/conversion.html", {"list": sampleList, "number": number})


def is_converted(request):
    script_id = request.GET["script_id"]
    obj = MNFScriptDatabase.objects.get(script_id=script_id)
    print("obj.script convetred function", obj.translated_script_path)
    if obj.translated_script_path:
        return JsonResponse({"status": "success"}, status=200)
    else:
        return JsonResponse({"status": "pending"}, status=202)


def make_conversion(request):
    print("********************************444444444444444444555555555555555556666666666666666666666----------------------")
    print("MAke Conversion mein  hu")
    # print(funcname)
    script_file_path = request.GET["script_file_path"]
    str1 = str(script_file_path)
    print(str1[41:45])
    if str1[41:45] == "user":
        script_file_path = "/home/" + str(str1[41:])

    script_id = request.GET["script_id"]
    script_id2 = request.GET["script_id2"]
    dial_conv_script = request.GET["dial_conv_script"]
    dial_src_lang = request.GET["dial_src_lang"]
    print("from_ui_dial_src_lang", dial_src_lang)
    non_dial_src_lang = request.GET["non_dial_src_lang"]
    print("from_ui_non_dial_src_lang", non_dial_src_lang)
    dial_src_script = request.GET["dial_src_script"]
    restrict_to_five = request.GET["restrict_to_five"]
    option3 = request.GET.get("option3")
    option4 = request.GET.get("option4")
    option5 = request.GET.get("option5")
    option6 = request.GET.get("option6")
    # script_name= request.GET['script_title']
    # dual_dial = request.GET['dual_dial_script']
    # dial_dest = request.GET['dial_dest_script']
    print("Inside conversion function of views")

    #MongoDBUrl = "mongodb+srv://MNF:root@cluster0.gbkxi.gcp.mongodb.net/DB?retryWrites=true&w=majority"
    MongoDBUrl = "mongodb+srv://mynextfilm:mnf123@cluster0.ojasb.mongodb.net/myFirstDatabase?retryWrites=true&w=majority"
    global client, script_title, db
    client = MongoClient(MongoDBUrl)
    db = client.DB
    # global client,script_title,db
    # script_id = "scr_1612524497" # for testing and then we will pass it through cli
    script_id = script_id
    print("script_id", script_id)
    user_script_data = db["mnfapp_mnfscriptdatabase"].find_one(
        {"script_id": script_id})
    print("user_script_data", user_script_data)
    # filename1 = sys.argv[1]

    script_title = user_script_data.get("script_title")
    filename1 = script_file_path
    print("Script File name ", filename1)
    # dial_dest_lang = sys.argv[2]
    dial_dest_lang = user_script_data.get("dial_dest_language")
    print("selected_dialouge lanaguage ", dial_dest_lang)
    # dial_dest_script = sys.argv[3]
    dial_dest_script = user_script_data.get("dial_dest_script")
    print("selected_dialouge script name", dial_dest_script)
    # non_dial_dest_lang = sys.argv[4]
    non_dial_dest_lang = user_script_data.get("nondial_dest_language")
    print("selected_actionline language", non_dial_dest_lang)
    # dual_dial_script = sys.argv[5]
    dual_dial_script = user_script_data.get("dual_dial_script")  # Yes,No
    print(dual_dial_script)
    print("Translation suru ho rha hai")
    print(
        "Yahan dekho",
        script_file_path,
        script_id,
        dial_conv_script,
        dial_src_lang,
        non_dial_src_lang,
        dial_src_script,
        dial_src_script,
        restrict_to_five,
    )
    print(
        rf'translate_function("{script_file_path}", "{script_id}", "{dial_conv_script}", "{dial_src_lang}","{non_dial_src_lang}", "{dial_src_script}", "{restrict_to_five}", "{option3}", "{option4}", "{option5}", "{option6}")'
    )
    try:
        # final_translation.translate_function(script_file_path, script_id, dial_conv_script, dial_src_lang,
        #  non_dial_src_lang, dial_src_script, restrict_to_five, option3, option4, option5, option6)
        # translate_function(script_file_path, script_id, dial_conv_script, dial_src_lang,non_dial_src_lang, dial_src_script, restrict_to_five, option3, option4, option5, option6)
        print("123455667788------------------------------------45644848484344345434843438--------------***************")
        print(script_id)
        filename = translate_function(
            script_file_path,
            script_id,
            dial_src_lang,
            non_dial_src_lang,
            dial_src_script,
            restrict_to_five,
            option3,
            option4,
            option5,
            option6
        )

        print(
            "111111111111111111111111111111122222222222222222222222222222222222222222222222222222222222222222222222222222244444444444444444444444444444444444444444444444444444411111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111")
        print(script_id2)
        if script_id2 == "":
            print("4545")
            pass
        else:
            print("5454")
            print(MNFScriptDatabase_2.objects.get(script_id=str(script_id2)))
            print(Conversion_link.objects.filter(
                script_idd=MNFScriptDatabase_2.objects.get(script_id=str(script_id2))))
            if Conversion_link.objects.filter(
                    script_idd=MNFScriptDatabase_2.objects.get(script_id=str(script_id2))).exists():
                y = Conversion_link.objects.filter(
                    script_idd=MNFScriptDatabase_2.objects.get(script_id=str(script_id2)))
            else:
                print("412412")
                y = Conversion_link()
                y.script_idd = MNFScriptDatabase_2.objects.get(
                    script_id=str(script_id2))
                y.save()
            print(
                "1111111111111111111111111111111111gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111")

            z = Conversions()
            print("1")
            z.created_on = datetime.datetime.now()
            print("2")
            z.dial_src_language = dial_src_lang
            print("3")
            z.dial_dest_language = dial_dest_lang
            print("4")
            z.dial_dest_script = dial_dest_script
            print("5")
            z.nondial_dest_language = non_dial_dest_lang
            print("6")
            z.nondial_src_script = non_dial_src_lang
            print("7")
            z.dial_src_script = dial_src_script
            print("8")
            z.dual_dial_script = dual_dial_script
            print("9")
            z.translated_script_path = str(filename)
            print("10")
            z.save()
            print(
                "111111111111111111111111111111111111111dssdsqwertqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq44444444444444444444111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111")

            y.conversions.add(z)

        print("see whats in script file path conversion", script_file_path)
        if request.GET.get("to_be_vetted_by_lpp"):
            print(3 * "###############")
            obj = MNFScriptDatabase.objects.get(script_id=script_id)
            X = LPPTASKDatabase()
            X.user_id = obj.user_id
            X.translated_file = obj.translated_script_path
            X.taskname = obj.script_file_path.replace(basePath, "")
            X.firstLanguage = languages[obj.dial_src_language]
            X.secondLanguage = languages[obj.dial_dest_language]
            X.usernote = "Kindly check if the translated file is correct as per the Uploaded Document!"
            X.save()
            task_assigner(int(X.id))

        print("Script Translated successfully")
        # context = {'status': "Success"}
        user = request.user
        subject = "Conversion Generated Successfully " + "."
        from_email = settings.EMAIL_HOST_USER
        to = request.user.email
        print("user is", user)
        print("from email", from_email)
        print("to email", to)
        print("script_name", script_title)
        print("dialogue destination language", languages.get(dial_dest_lang))
        print("non dialogue destination language",
              languages.get(non_dial_dest_lang))
        print("non dialogue source script", languages.get(non_dial_src_lang))
        response = redirect("narration").url

        path = request.build_absolute_uri(response)
        context = {
            "Name": user,
            "script_id": script_id,
            "script_name": script_title,
            "dual_dial": dual_dial_script,
            "dial_src_lang": dial_src_script,
            "dial_dest_lang": languages.get(dial_dest_lang),
            "non_dial_dest_lang": languages.get(non_dial_dest_lang),
            "non_dial_src_lang": languages.get(non_dial_src_lang),
            "dial_dest_script": dial_dest_script,
            "status": "Success",
            "path": path,
        }
        html_content = render_to_string(
            "conversion/email.html", context
        )  # render with dynamic value
        print(html_content, "this is a html content ****************** ")
        # Strip the html tag. So people can see the pure text at least.
        text_content = strip_tags(html_content)
        # create the email, and attach the HTML version as well.
        print("email process started")
        msg = EmailMultiAlternatives(subject, text_content, from_email, [to])
        msg.attach_alternative(html_content, "text/html")
        msg.send()
        print("after mail has been sent my context is", context)

        return JsonResponse(context, status=200)
    except:
        print(
            "Script translation failed due to some internal error. If you have made any payment for conversion that will be refunded"
        )
        payment_intent_id = user_script_data.get("payment_intent_id")
        print(
            "translated script file path in except",
            user_script_data.get("translated_script_path"),
        )
        obj = MNFScriptDatabase.objects.get(script_id=script_id)
        print("obj.script convetred function", obj.translated_script_path)

        # if obj.translated_script_path:
        #     print("Script Translated successfully")
        #     context = {'status': "Success"}
        #     user = request.user
        #     # email = user.email
        #     # message = "Hi " + str(user) + ",\nThe conversion for your script "+script_title + \
        #     #     " is ready. You will find it in the My Conversions section of the MyNextFilm website. For any queries, feel free to reach us at support@mynextfilm.com.\nHappy Filming!\nMy Next Film"
        #     # email_message = EmailMessage(
        #     #     "Conversion generated successfully", message, settings.EMAIL_HOST_USER, [email])
        #     # email_message.send()
        #     # var = Notifications(user_id=request.user, notification=str(
        #     #     "Conversion generated successfully for "+script_title))
        #     # var.save()

        #     subject= "Conversion Generated Successfully "+ "."
        #     from_email = settings.EMAIL_HOST_USER
        #     to = user.email
        #     context = {

        #         'Name': user,
        #         'script_name':script_title,
        #         'dual_dial':dual_dial_script,
        #         'dial_dest':dial_dest_script,
        #         'status': "Success",

        #     }
        #     html_content = render_to_string('conversion/email.html', context)  # render with dynamic value
        #     # Strip the html tag. So people can see the pure text at least.
        #     text_content = strip_tags(html_content)
        #     # create the email, and attach the HTML version as well.
        #     print('email process started')
        #     msg = EmailMultiAlternatives(subject, text_content, from_email, [to])
        #     msg.attach_alternative(html_content, "text/html")
        #     msg.send()

        #     return JsonResponse(context, status=200)

        if payment_intent_id:
            if payment_intent_id[0:4] == "pay":
                client = razorpay.Client(auth=(keyID, keySecret))
                payment_id = payment_intent_id
                total_amount = request.POST.get("total_amount")
                c = CurrencyRates()
                rate = c.get_rate("USD", "INR")
                payment_amount = int(float(total_amount) * 100 * rate)
                resp = client.payment.refund(payment_id, payment_amount)
            else:
                stripe.Refund.create(payment_intent_id)

        return JsonResponse({}, status=505)


@login_required
def view_conversion(request):
    number = ReferUser.objects.filter(reffered_by=request.user).count()
    obj = MNFScriptDatabase.objects.filter(
        user_id=request.user).order_by("-date_at")

    script_path = []
    pq = 0
    for i in obj:
        if i.translated_script_path != "":
            script_path.append(i.translated_script_path)
            pq += 1

    print(script_path)
    lenV = len(script_path)
    print(len(script_path))
    return render(
        request, "conversion/stored_conversions.html", {
            "script_path": obj, "pq": pq, "number": number}
    )


def delete_script(request, id):
    MNFScriptDatabase.objects.get(id=id).delete()
    return HttpResponseRedirect("/conversion/view_conversion")


def demo(request):
    number = ReferUser.objects.filter(reffered_by=request.user).count()
    return render(request, "conversion/demo.html", {"number": number})


def announce(request):
    message = ""
    user = User.objects.all()
    cUser = request.user
    if cUser.is_superuser == True:
        if request.method == "POST":
            notification = request.POST.get("message")
            for i in user:
                var = Notifications(user_id=i, notification=notification)
                var.save()
            messgae = "notification sent successfull."
            return render(request, "conversion/announce.html", {"message": message})
        else:
            return render(request, "conversion/announce.html", {})
    else:
        message = " you need to be superuser"
        return render(request, "conversion/announce.html", {"message": message})


def sampleConversion():
    dict = {"id": 1, "title": "Deepika"}


def conversionCheckout(request):
    # print(funcname)
    if request.method == "POST":
        if request.POST.get("want_to_be_vetted"):
            total_amount = request.session["lppamount"]
        else:
            total_amount = request.session["amount"]
        request.session["want_to_be_vetted"] = request.POST.get(
            "want_to_be_vetted")
        request.session["interested_to_be_lpp"] = request.POST.get(
            "interested_to_be_lpp"
        )
        if request.POST.get("country") == "IN":
            c = CurrencyRates()
            rate = c.get_rate("USD", "INR")
            amtINR = round(float(float(total_amount) * rate), 2)
            client = razorpay.Client(auth=(keyID, keySecret))
            payment_intent = client.order.create(
                {
                    "amount": int(float(total_amount) * 100 * rate),
                    "currency": "INR",
                    "payment": {
                        "capture": "automatic",
                        "capture_options": {"refund_speed": "normal"},
                    },
                }
            )
            pid = payment_intent["id"]
            context = {
                "pk": keyID,
                "amtINR": amtINR,
                "pid": pid,
                "amount": total_amount,
            }
            return render(request, "conversion/checkoutC_RazorPay.html", context)

        else:
            c = CurrencyRates()
            rate = c.get_rate("USD", "INR")
            amtINR = round(float(float(total_amount) * rate), 2)
            payment_intent = stripe.PaymentIntent.create(
                amount=int(float(total_amount) * 100 * rate),
                currency="INR",
                payment_method_types=["card"],
            )
            request.session["payment_intent_id"] = payment_intent.id
            context = {
                "pk": STRIPE_PUB_KEY,
                "total_amount": total_amount,
                "amtINR": amtINR,
            }
            return render(request, "conversion/checkoutC.html", context)
    return render(request, "conversion/conversion.html")


@login_required
def conversioncard(request):
    if request.method == "POST":
        payment_method_id = request.POST["payment_method_id"]
        payment_intent_id = request.session["payment_intent_id"]

        customer = stripe.Customer.create(
            email=request.user.email,
            payment_method=payment_method_id,
            invoice_settings={"default_payment_method": payment_method_id},
        )

        stripe.PaymentIntent.modify(
            payment_intent_id, payment_method=payment_method_id, customer=customer.id
        )
        ret = stripe.PaymentIntent.confirm(payment_intent_id)
        pi = stripe.PaymentIntent.retrieve(payment_intent_id)
        if ret.status == "requires_action":
            context = {
                "pk": STRIPE_PUB_KEY,
                "payment_intent_secret": pi.client_secret,
            }
            return render(request, "conversion/3dsecuredConversion.html", context)
        return render(request, "payments/paymentdone.html")


def paymentDoneC(request):

    if request.method == "POST":

        script_id = request.session["script_id"]
        script_title = request.session["script_title"]
        script_file_path = request.session["script_file_path"]
        dial_conv_script = request.session["dial_conv_script"]
        nondial_dest_language = request.session["nondial_dest_language"]
        dial_dest_language = request.session["dial_dest_language"]
        dial_dest_script = request.session["dial_dest_script"]
        dial_src_lang = request.session["dial_src_lang"]
        non_dial_src_lang = request.session["non_dial_src_lang"]
        dial_src_script = request.session["dial_src_script"]
        non_dial_src_script = request.session["non_dial_src_script"]
        dual_dial_script = request.session["dual_dial_script"]
        if request.session.get("want_to_be_vetted"):
            total_amount = request.session["lppamount"]
        else:
            total_amount = request.session["amount"]
        to_be_vetted_by_lpp = request.session.get("want_to_be_vetted")
        option3 = request.session["option3"]
        option4 = request.session["option4"]
        option5 = request.session["option5"]
        option6 = request.session["option6"]
        payment_intent_id = request.session["payment_intent_id"]
        pi = stripe.PaymentIntent.retrieve(payment_intent_id)

        if pi.status == "succeeded":
            c = conversionPayment()
            s = MNFScriptDatabase()
            s.user_id = request.user
            s.script_id = script_id
            s.script_title = script_title
            s.author_name = request.user.first_name
            s.dial_dest_language = dial_dest_language
            s.dial_dest_script = dial_dest_script
            s.nondial_dest_language = nondial_dest_language
            s.dual_dial_script = dual_dial_script
            s.script_file_path = script_file_path
            s.payment_intent_id = payment_intent_id
            s.nondial_src_script = non_dial_src_script
            s.dial_src_script = dial_src_script
            s.dial_src_language = dial_src_lang
            s.nondial_src_language = non_dial_src_lang
            s.save()

            # -----------Adding Details to payment Details--------------------------

            user_id = request.user
            payment_id = payment_intent_id
            # services_used =
            script_info = script_id
            total_amount = total_amount
            # discount =
            # amount_charged =
            # gateway_fee =
            # currency =
            # pay_method =
            # payment_status =
            # payment_gateway =
            PaymentData.objects.create(
                user_id=user_id,
                payment_id=payment_id,
                script_info=script_info,
                total_amount=total_amount,
            )

            # c.pid = privilegedUser1.objects.get(user= request.user)
            # c.script_title = script_title
            # c.script_id = script_id
            # c.to_be_vetted_by_lpp = to_be_vetted_by_lpp
            # c.payment_intent_id = payment_intent_id
            # c.total_amount = str(total_amount)
            # c.script_file_path = script_file_path
            # c.has_paid = 'yes'
            # c.save()
            context = {
                "script_id": script_id,
                "script_title": script_title,
                "script_file_path": script_file_path,
                "dial_conv_script": dial_conv_script,
                "nondial_dest_language": nondial_dest_language,
                "dial_dest_language": dial_dest_language,
                "dial_dest_script": dial_dest_script,
                "dial_src_lang": dial_src_lang,
                "non_dial_src_lang": non_dial_src_lang,
                "dial_src_script": dial_src_script,
                "dual_dial_script": dual_dial_script,
                "total_amount": total_amount,
                "to_be_vetted_by_lpp": to_be_vetted_by_lpp,
                "restrict_to_five": "no",
                "option3": option3,
                "option4": option4,
                "option5": option5,
                "option6": option6,
            }
            return render(request, "conversion/my_conversions.html", context)
        else:
            return render(request, "payments/failed.html")


def paymentDoneC_RazorPay(request):
    if request.method == "POST":
        script_id = request.session["script_id"]
        script_title = request.session["script_title"]
        script_file_path = request.session["script_file_path"]
        dial_conv_script = request.session["dial_conv_script"]
        nondial_dest_language = request.session["nondial_dest_language"]
        dial_dest_language = request.session["dial_dest_language"]
        dial_dest_script = request.session["dial_dest_script"]
        dial_src_lang = request.session["dial_src_lang"]
        non_dial_src_lang = request.session["non_dial_src_lang"]
        dial_src_script = request.session["dial_src_script"]
        dual_dial_script = request.session["dual_dial_script"]
        non_dial_src_script = request.session["non_dial_src_script"]
        if request.session.get("want_to_be_vetted"):
            total_amount = request.session["lppamount"]
        else:
            total_amount = request.session["amount"]
        to_be_vetted_by_lpp = request.session.get("want_to_be_vetted")
        option3 = request.session["option3"]
        option4 = request.session["option4"]
        option5 = request.session["option5"]
        option6 = request.session["option6"]
        razorpay_order_id = request.POST["razorpay_order_id"]
        razorpay_payment_id = request.POST["razorpay_payment_id"]
        razorpay_signature = request.POST["razorpay_signature"]
        client = razorpay.Client(auth=(keyID, keySecret))
        params_dict = {
            "razorpay_order_id": razorpay_order_id,
            "razorpay_payment_id": razorpay_payment_id,
            "razorpay_signature": razorpay_signature,
        }
        try:
            client.utility.verify_payment_signature(params_dict)
        except:
            return render(request, "payments/failed.html")
        c = conversionPayment()
        s = MNFScriptDatabase()
        s.user_id = request.user
        s.script_id = script_id
        s.script_title = script_title
        s.author_name = request.user.first_name
        s.dial_dest_language = dial_dest_language
        s.dial_dest_script = dial_dest_script
        s.nondial_dest_language = nondial_dest_language
        s.dual_dial_script = dual_dial_script
        s.script_file_path = script_file_path
        s.payment_intent_id = razorpay_payment_id
        s.nondial_src_script = non_dial_src_script
        s.dial_src_script = dial_src_script
        s.dial_src_language = dial_src_lang
        s.nondial_src_language = non_dial_src_lang
        s.save()
        # c.pid = privilegedUser1.objects.get(user= request.user)
        # c.script_title = script_title
        # c.script_id = script_id
        # c.to_be_vetted_by_lpp = to_be_vetted_by_lpp
        # c.payment_intent_id = razorpay_payment_id
        # c.total_amount = str(total_amount)
        # c.script_file_path = script_file_path
        # c.has_paid = 'yes'
        # c.save()
        context = {
            "script_id": script_id,
            "script_title": script_title,
            "script_file_path": script_file_path,
            "dial_conv_script": dial_conv_script,
            "nondial_dest_language": nondial_dest_language,
            "dial_dest_language": dial_dest_language,
            "dial_dest_script": dial_dest_script,
            "dial_src_lang": dial_src_lang,
            "non_dial_src_lang": non_dial_src_lang,
            "dial_src_script": dial_src_script,
            "dual_dial_script": dual_dial_script,
            "total_amount": total_amount,
            "to_be_vetted_by_lpp": to_be_vetted_by_lpp,
            "restrict_to_five": "no",
            "option3": option3,
            "option4": option4,
            "option5": option5,
            "option6": option6,
        }
        return render(request, "conversion/my_conversions.html", context)
    else:
        return render(request, "payments/failed.html")


def convert_story(request):
    if request.method == "POST":
        from mnfapp.views import languages as lang
        y = StoryConversion()
        y.user_id = request.user
        y.upload_story = request.FILES["story"]

        y.target_language = lang[request.POST.get('target_lang')]
        y.source_language = lang[request.POST.get('src_lang')]
        y.save()

    context = {}
    return render(request, "conversion/convertStory.html", context)


def view_converted_stories(request):
    number = ReferUser.objects.filter(reffered_by=request.user).count()
    obj = StoryConversion.objects.filter(
        user_id=request.user).order_by("-date_at")

    script_path = []
    pq = 0
    for i in obj:
        if i.translated_story_docx != "":
            script_path.append(i.translated_story_docx)
            pq += 1

    return render(request, "conversion/viewStory.html", {"script_path": obj, "pq": pq, "number": number})