from docx.shared import Inches, Cm, Pt
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.table import WD_TABLE_ALIGNMENT, WD_ALIGN_VERTICAL

default_script = {
    "hi": "Devanagari",
    "en": "Latin",
    "ur": "Arabic",
    "ar": "Arabic",
    "kn": "Kannada",
    "ta": "Tamil",
    "bg": "Cyrillic",
    "bn": "Bengali",
    "te": "Telugu",
    "ml": "Malayalam",
    "ru": "Cyrillic",
    "sr": "Cyrillic",
    "uk": "Cyrillic",
    "hr": "Cyrillic",
    "ga": "Latin",
    "sq": "Latin",
    "mr": "Devanagari",
    "fa": "Arabic",
    "tr": "Latin",
    "hu": "Latin",
    "it": "Latin",
    "ro": "Latin",
    "pa": "Gurmukhi",
    "gu": "Gujarati",
    "or": "Odia",
    "zh-CN": "Hanji",
    "zh-TW": "Hanji",
    "ne": "Devanagri",
    "fr": "Latin",
    "es": "Latin",
    "id": "Latin",
    "el": "Latin",
    "ja": "Kana",
    "jv": "Javanese",
    "ko": "Hangul",
    "be": "Cyrillic",
    "uz": "Cyrillic",
    "sd": "Arabic",
    "af": "Latin",
    "de": "Latin",
    "is": "Latin",
    "ig": "Latin",
    "la": "Latin",
    "pt": "Latin",
    "my": "Burmese",
    "th": "Thai",
    "su": "Sundanese",
    "lo": "Lao",
    "am": "amharic",
    "si": "sinhala",
    "az": "Cyrillic",
    "kk": "Cyrillic",
    "mk": "Cyrillic",
    "bs": "Cyrillic",
    "ps": "Arabic",
    "mg": "Latin",
    "ms": "Latin",
    "yo": "Arabic",
    "cs": "Latin",
    "da": "Latin",
    "nl": "Latin",
    "tl": "Latin",
    "no": "Latin",
    "sl": "Latin",
    "sv": "Latin",
    "vi": "Latin",
    "cy": "Latin",
    "he": "Hebrew",
    "hy": "Armenian",
    "km": "Khmer",
    "ka": "Georgian",
    "mn": "Mongolian",
    "ku": "Latin",
    "ky": "Cyrillic",
    "tk": "Latin",
    "fi": "Latin",
    "ht": "Latin",
    "haw": "Latin",
    "lt": "Latin",
    "lb": "Latin",
    "mt": "Latin",
    "pl": "Latin",
    "eo": "Latin",
    "tt": "Cyrillic",
    "ug": "Arabic",
    "ha": "Latin",
    "so": "Latin",
    "sw": "Latin",
    "yi": "Latin",
    "eu": "Latin",
    "ca": "Latin",
    "ceb": "Latin",
    "co": "Latin",
    "et": "Latin",
    "fy": "Latin",
    "gl": "Latin",
    "hmn": "Latin",
    "rw": "Latin",
    "lv": "Latin",
    "mi": "Latin",
    "sm": "Latin",
    "gd": "Latin",
    "st": "Latin",
    "sn": "Latin",
    "sk": "Latin",
    "xh": "Latin",
    "zu": "Latin",
}


languages = {
    "hi": "Hindi",
    "en": "English",
    "te": "Telugu",
    "ur": "Urdu",
    "ar": "Arabic",
    "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",
    "tr": "Turkish",
    "hu": "Hungarian",
    "it": "Italian",
    "ro": "Romanian",
    "pa": "Punjabi",
    "gu": "Gujrati",
    "or": "Odia",
    "zh": "Chienese",
    "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": "Mayanmar",
    "th": "Thai",
    "su": "Sundanese",
    "lo": "Lao",
    "am": "amharic",
    "si": "sinhala",
    "az": "azerbaijani ",
    "kk": "Kazak",
    "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 addSlugLine(document, slugline):
    slug_data = document.add_paragraph()
    slug_data_format = slug_data.paragraph_format
    slug_data_format.space_after = Pt(12)
    slug_data_format.keep_with_next = True
    slug_data_format.left_indent = Inches(0)
    slug_data.style.font.name = "Courier New"
    slug_data.style.font.size = Pt(12.0)
    slug_data.add_run(slugline).bold = True


def addActionLine(document, actionline, non_dial_dest_lang):
    act = document.add_paragraph()
    act_format = act.paragraph_format
    act_format.space_after = Pt(12)
    act_format.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY
    act_format.line_spacing = Pt(12)
    act_format.left_indent = Inches(0)
    if (non_dial_dest_lang == "hi") or (non_dial_dest_lang == "gu"):
        act.style.font.name = "Mangal"
    else:
        act.style.font.name = "Courier New"
    act.add_run(actionline)


def addSpeaker(document, speaker):
    spk = document.add_paragraph(speaker)
    spk.style.font.name = "Courier New"
    spk_format = spk.paragraph_format
    spk_format.keep_with_next = True
    spk_format.space_after = 0
    spk_format.line_spacing = Pt(12)
    spk_format.left_indent = Inches(2.0)


def addParenthetical(document, parenthetical):
    parathetical = document.add_paragraph(parenthetical)
    parathetical.style.font.name = "Courier New"
    parathetical_format = parathetical.paragraph_format
    parathetical_format.keep_with_next = True
    parathetical_format.space_after = 0
    parathetical_format.line_spacing = Pt(12)
    parathetical_format.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY
    parathetical_format.left_indent = Inches(1.5)
    parathetical_format.right_indent = Inches(1.5)


def addDialogue(document, dialogue, dial_dest_lang):
    dia = document.add_paragraph(dialogue)
    dia_format = dia.paragraph_format
    dia_format.keep_together = True
    dia_format.space_after = Pt(12)
    dia_format.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY
    dia_format.line_spacing = Pt(12)
    dia_format.left_indent = Inches(1)
    dia_format.right_indent = Inches(1.25)
    if dial_dest_lang == "hi":
        dia.style.font.name = "Mangal"
    else:
        dia.style.font.name = "Courier New"


def dual_script(document, orignal_dial, translated_dial, dial_dest_lang):
    table = document.add_table(rows=1, cols=3)
    table.alignment = WD_TABLE_ALIGNMENT.CENTER
    table.autofit = False
    table.space_before = Pt(10)
    table.allow_autofit = False
    table.rows[0].cells[0].width = Inches(3.75)
    table.rows[0].cells[1].width = Inches(0.30)
    table.rows[0].cells[0].vertical_alignment = WD_ALIGN_VERTICAL.TOP

    col1 = table.rows[0].cells
    dialogue1 = col1[0].paragraphs[0]
    dialogue1.add_run(orignal_dial)
    dia_format1 = dialogue1.paragraph_format
    dia_format1.space_before = Pt(5)
    table.rows[0].cells[2].width = Inches(3.75)
    col3 = table.rows[0].cells

    dialogue2 = col3[2].paragraphs[0]
    dialogue2.add_run(translated_dial)
    dia_format2 = dialogue2.paragraph_format
    dia_format2.space_before = Pt(5)
    if dial_dest_lang == "hi":
        dialogue2.style.font.name = "Mangal"
    else:
        dialogue2.style.font.name = "Courier New"


def addTransition(document, transition):
    transitions_data = document.add_paragraph(transition)
    transitions_data_format = transitions_data.paragraph_format
    transitions_data_format.space_after = Pt(12)
    transitions_data_format.keep_with_next = True
    transitions_data_format.left_indent = Inches(5.0)


# def dial_checker(dial_dest_lang, dial_src_lang, dial_dest_script, dial_src_script ):
#     if( dial_dest_lang != dial_src_lang ):
#         dial_translate = True
#         if ( dial_dest_script != default_script[dial_dest_lang]):
#               dial_transliterate = True
#         else:
#               dial_transliterate = False
#     else:
#         dial_translate = False

#     if dial_translate == False:
#       if ( dial_dest_script != dial_src_script ):
#           dial_transliterate = True
#       else:
#           dial_transliterate = False
#     return dial_translate, dial_transliterate


def dial_checker(dial_dest_lang, dial_src_lang):
    if dial_dest_lang != dial_src_lang:
        dial_translate = True
    else:
        dial_translate = False

    return dial_translate


def non_dial_checker(non_dial_dest_lang, non_dial_src_lang):
    if non_dial_dest_lang != non_dial_src_lang:
        non_dial_translate = True
    else:
        non_dial_translate = False
    return non_dial_translate