import sys
import os
from MNF.settings import BasePath
from .base import make_directory
from .google_srt import google_sub
from .AWS_S3 import aws_sub
from .awSRT import aws_final
from .azure_srt import azure_sub_temp
from .compare_srt_output import compare_subs
from MNF.settings import BasePath, MEDIA_ROOT
import moviepy.editor as mp
import random


# import logging
# basePath = BasePath()
# current = os.getcwd() + "/narration/Narration_Code"
# current = basePath + "/conversion/subtitling"
# logger = logging.getLogger(__name__)
# logger.setLevel(logging.DEBUG)
# formatter = logging.Formatter(
#     '%(asctime)s:%(levelname)s:%(lineno)d:%(name)s:%(message)s')
# file_handler = logging.FileHandler(rf'{current}/intro_collage_video.log')
# file_handler.setFormatter(formatter)
# logger.addHandler(file_handler)
# import google_srt
# import AWS_S3
# import awSRT
# import azure_srt
# import compare_srt_output


def generate_subtitle(mp4, lang_code):
    # mp4 = "/home/user/mnf/project/MNF/media/videos/Subtitling_Videos/normal.mp4"

    # lang = {
    #     'Arabic': 'ar-AE',
    #     'Bengali': 'bn-IN',
    #     'Catalan': 'ca-ES',
    #     'English': 'en-US',
    #     'French': 'fr-FR',
    #     'Gujarati': 'gr-IN',
    #     'Hindi': 'hi-IN',
    #     'Kannada': 'kn-IN',
    #     'Marathi': 'mr-IN',
    #     'Spanish': 'es-ES',
    #     'Tamil': 'ta-IN',
    #     'Telugu': 'te-IN'
    # }
    lang = {'Hindi': 'hi-IN', 'English': 'en-IN', 'Urdu': 'ur-PK', 'Arabic': 'ar-XA', 'Bengali': 'bn-IN', 'Kannada': 'kn-IN', 'Tamil': 'ta-IN', 'Bulgarian': 'bg-BG', 'Bangla': 'bn-BD',
            'Malayalam': 'ml-IN', 'Russian': 'ml-IN', 'Serbian': 'sr-RS',  'Ukranian': 'uk-UA', 'Croatian': 'hr-HR', 'Irish': 'ga-IE', 'Albanian': 'sq',
            'Marathi': 'mr-IN', 'Persian': 'fa-IR', 'Telugu': 'te-IN', 'Turkish': 'tr-TR', 'Hungarian': 'hu-HU', 'Italian': 'it-IT', 'Romanian': 'ro-RO', 'Punjabi': 'pa', 'Gujrati': 'gu-IN',
            'Odia': 'or',  'Chinese': 'zh-CN',  'Nepali': 'ne', 'French': 'fr-FR', 'Spanish': 'es-ES', 'Indonesian': 'id-ID',  'Greek': 'el-GR', 'Japanese': 'ja-JP',
            'Javanese': 'jv-ID', 'Korean': 'ko-KR', 'Belarusian': '',  'Uzbek': 'uz-UZ', 'Sindhi': '',  'Afrikaans': 'af-ZA',  'German': 'de-DE',  'Icelandic': '',
            'Igbo': '',  'Latin': '',  'Portugese': 'pt-PT',  'Myanmar': 'my-MM', 'Thai': 'th-TH', 'Sundanese': '',  'Lao': 'lo', 'amharic': 'am-ET',  'Sinhala': '',
            'Azerbaijani': 'az',  'Kazak': 'kk',  'Macedonian': '',  'Bosnian': 'bs',  'Pashto': 'ps',  'Malagasy': 'mg',  'Malay': 'ms',  'Yoruba': '',
            'Czech': 'cs-CZ', 'Danish': 'da-DK', 'Dutch': 'nl-NL',  'Tagalog': '',  'Norwegian': 'nb-NO',  'Slovenian': 'sl-SI', ' Swedish': 'sv-SE',  'Vietnamese': 'vi-VN', 'Welsh': 'cy-GB',
            'Hebrew': 'he',  'Armenian': 'hy',  'Khmer': 'km',  'Georgian': '',  'Mongolian': '', 'Kurdish': 'ku', 'Kyrgyz': '',  'Turkmen': '',
            'Finnish': 'fi-FI',  'Haitian Creole': 'ht',  'Hawaiian': '',  'Lithuanian': 'lt-LT', 'Luxembourgish': '', 'Maltese': 'lt-LT',  'Polish': 'pl-PL',
            'Esperanto': '', 'Tatar': '',  'Uyghur': '',  'Hausa': '',  'Somali': 'so-SO', 'Swahili': 'sw-KE',  'Yiddish': '',  'Basque': '',  'Catalan': 'ca-ES',
            'Cebuano': '', 'Corsican': '',  'Estonian': 'et-EE',  'Frisian': '',  'Galician': 'gl-ES', 'Hmong': 'mww', 'Kinyarwanda': '', 'Latvian': '',
            'Maori': 'mi',  'Samoan': 'sm',  'Scots Gaelic': '',  'Sesotho': '', 'Shona': '', 'Slovak': 'sk-SK', 'Xhosa': '', 'Zulu': 'zu-ZA'}
    lang_code = lang[lang_code]

    movie_name = os.path.splitext(mp4)[0]
    # logger.debug(movie_name)

    vid_path = make_directory(movie_name)

    my_clip = mp.VideoFileClip(mp4)  # uncomment when running from UI
    # my_clip = mp.VideoFileClip(temp)  # comment when running from command prompt

    random_num = random.randint(0, 1000)
    temp = vid_path + "/audio_" + str(random_num) + ".wav"
    temp1 = "audio_" + str(random_num)+".wav"
    print(temp1)
    my_clip.audio.write_audiofile(temp)

    print("Azure code is running")
    try:
        azure_sub_temp(temp1, lang_code, vid_path)
        print("-"*30)
    except:
        pass
    print("Google code is running")
    try:
        google_sub(temp1, lang_code, vid_path)
        print("-"*30)
    except:
        pass
    print("AWS code is running")
    try:
        aws_sub(temp1, lang_code, vid_path)
        print("JSON created successfully")
        # vid_path = "/home/user/mnf/project/MNF/media/videos/Subtitling_Videos/sample"
        aws_final(vid_path)
        print("-"*30)
    except:
        pass
    print("Best SRT!")
    return compare_subs(vid_path)


# mp4 = sys.argv[1]  # comment when running from UI
# lang_code = sys.argv[2]  # comment when running from UI
# generate_subtitle(mp4, lang_code)  # comment when running from UI