import json
import boto3
import requests

import requests
import base64

def download_srt_and_encode_base64(url):
    #response = requests.get(url)
   # response.raise_for_status()

    srt_content = response.content
    base64_encoded_srt = base64.b64encode(srt_content)

    return base64_encoded_srt

s3_client = boto3.client(service_name='s3')
translate = boto3.client('translate')

def get_info(text, lang_code):
    result = translate.translate_text(
        Text=text,
        SourceLanguageCode='auto',
        TargetLanguageCode=lang_code
    )
    return result

def get_SourceLanguage(text, lang_code):
    result = translate.translate_text(
        Text=text,
        SourceLanguageCode='auto',
        TargetLanguageCode=lang_code
    )
    return result['SourceLanguageCode']

def translate_text(text, lang_code):
    result = translate.translate_text(
        Text=text,
        SourceLanguageCode='auto',
        TargetLanguageCode=lang_code
    )
    return result['TranslatedText']


def lambda_handler(event, context):
    file_name = event['Records'][0]['s3']['object']['key']
    bucketName=event['Records'][0]['s3']['bucket']['name']
    outfile="s3://output-translate-bucket-project/{}".format(file_name)
    print("Event details : ",event)
    print("Input File Name : ",file_name)
    print("Input Bucket Name : ",bucketName)
    print("Output File Name : ",outfile)
    # get S3 object
    result = s3_client.get_object(Bucket=bucketName, Key=file_name)
    result_fr = s3_client.get_object(Bucket=bucketName, Key=file_name)
    result_es = s3_client.get_object(Bucket=bucketName, Key=file_name)
    result_po = s3_client.get_object(Bucket=bucketName, Key=file_name)
    result_en = s3_client.get_object(Bucket=bucketName, Key=file_name)

    cte=0


    for line_first in result["Body"].read().splitlines():
        if cte==0:
            print(' line here is :',line_first)
            each_line = line_first.decode('utf-8')
            if(each_line!=''):
                print('we ade')
                source_language=get_SourceLanguage(each_line, 'fr')
                cte=cte+1
    dic={}
    if source_language=='en':
        print('we are heeere !!')

        final_document_array_fr = ""
       # print('result fr is :',result_again["Body"].read().splitlines())
        for line_fr in result_fr["Body"].read().splitlines():
           # print(' line fr is :',line_fr)
            each_line_fr = line_fr.decode('utf-8')
        #    print("Input Line fr: ",each_line_fr)
            if(each_line_fr!=''):
                translated_fr=translate_text(each_line_fr, 'fr')
                #print('the trans is :',get_info(each_line_fr, 'fr'))
               # print("After translation : ",translated_fr)
                final_document_array_fr+=translated_fr
                final_document_array_fr+='\n\n'

       # print('the fr result is :',final_document_array_fr)
        s3_client.put_object(Body=final_document_array_fr, Bucket='output-translate-bucket-project', Key='fr_'+file_name)


        final_document_array_es = ""
        for line_es in result_es["Body"].read().splitlines():
            #print(' line es is :',line_es)
            each_line_es = line_es.decode('utf-8')
            #print("Input Line es: ",each_line_es)
            if(each_line_es!=''):
                translated_es=translate_text(each_line_es, 'es')
               # print("After translation : ",translated_es)
                final_document_array_es+=translated_es
                final_document_array_es+='\n\n'
      #  print('the es result is :',final_document_array_es)
        s3_client.put_object(Body=final_document_array_es, Bucket='output-translate-bucket-project', Key='es_'+file_name)

        final_document_array_po = ""
        for line_po in result_po["Body"].read().splitlines():
            #print(' line es is :',line_es)
            each_line_po = line_po.decode('utf-8')
            #print("Input Line es: ",each_line_po)
            if(each_line_po!=''):
                translated_po=translate_text(each_line_po, 'pt')
               # print("After translation : ",translated_po)
                final_document_array_po+=translated_po
                final_document_array_po+='\n\n'
      #  print('the es result is :',final_document_array_po)
        s3_client.put_object(Body=final_document_array_po, Bucket='output-translate-bucket-project', Key='po_'+file_name)

        dic['file']=file_name
        dic['path_srt_fr']="https://convertion-html-to-srt.s3.us-east-2.amazonaws.com/fr_"+file_name.replace('.html','.srt')
        dic['path_srt_es']="https://convertion-html-to-srt.s3.us-east-2.amazonaws.com/es_"+file_name.replace('.html','.srt')
        dic['path_srt_po']="https://convertion-html-to-srt.s3.us-east-2.amazonaws.com/po_"+file_name.replace('.html','.srt')
        dic['path_srt_en']=""
        dic['file_srt_en']=""
        dic['file_srt_es']=final_document_array_es
        dic['file_srt_po']=final_document_array_po
        dic['file_srt_fr']=final_document_array_fr


    if source_language=='fr':

        final_document_array_en = ""
       # print('result en is :',result_again["Body"].read().splitlines())
        for line_en in result_en["Body"].read().splitlines():
           # print(' line en is :',line_en)
            each_line_en = line_en.decode('utf-8')
        #    print("Input Line en: ",each_line_en)
            if(each_line_en!=''):
                translated_en=translate_text(each_line_en, 'en')
               # print("After translation : ",translated_en)
                final_document_array_en+=translated_en
                final_document_array_en+='\n\n'

       # print('the en result is :',final_document_array_en)
        s3_client.put_object(Body=final_document_array_en, Bucket='output-translate-bucket-project', Key='en_'+file_name)

        #=========== START EDIT
    #     final_document_array_es = ""
    #     for line_es in result_es["Body"].read().splitlines():
    #         #print(' line es is :',line_es)
    #         each_line_es = line_es.decode('utf-8')
    #         #print("Input Line es: ",each_line_es)
    #         if(each_line_es!=''):
    #             translated_es=translate_text(each_line_es, 'es')
    #           # print("After translation : ",translated_es)
    #             final_document_array_es+=translated_es
    #             final_document_array_es+='\n\n'
    #   # print('the es result is :',final_document_array_es)
    #     s3_client.put_object(Body=final_document_array_es, Bucket='output-translate-bucket-project', Key='es_'+file_name)



    final_document_array_es = ""
    for line_es in result_es["Body"].read().splitlines():
        each_line_es = line_es.decode('utf-8')
        if(each_line_es!=''):
            translated_es = translate_text(each_line_es, 'es')
            final_document_array_es += translated_es
            final_document_array_es += '\n\n'

    while True:
        try:
            s3_client.put_object(Body=final_document_array_es, Bucket='output-translate-bucket-project', Key='es_'+file_name)
            break
        except ClientError as e:
            if e.response['Error']['Code'] == 'NoSuchKey':
                time.sleep(1)
                continue
            else:
                raise
        #======== END EDIT

        final_document_array_po = ""
        for line_po in result_po["Body"].read().splitlines():
            #print(' line es is :',line_es)
            each_line_po = line_po.decode('utf-8')
            #print("Input Line es: ",each_line_po)
            if(each_line_po!=''):
                translated_po=translate_text(each_line_po, 'pt')
               # print("After translation : ",translated_po)
                final_document_array_po+=translated_po
                final_document_array_po+='\n\n'
        #print('the es result is :',final_document_array_po)
        s3_client.put_object(Body=final_document_array_po, Bucket='output-translate-bucket-project', Key='po_'+file_name)
        dic['file']=file_name
        dic['path_srt_en']="https://convertion-html-to-srt.s3.us-east-2.amazonaws.com/en_"+file_name.replace('.html','.srt')
        dic['path_srt_es']="https://convertion-html-to-srt.s3.us-east-2.amazonaws.com/es_"+file_name.replace('.html','.srt')
        dic['path_srt_po']="https://convertion-html-to-srt.s3.us-east-2.amazonaws.com/po_"+file_name.replace('.html','.srt')
        dic['path_srt_fr']=""
        dic['file_srt_en']=final_document_array_en
        dic['file_srt_es']=final_document_array_es
        dic['file_srt_po']=final_document_array_po
        dic['file_srt_fr']=""


    if source_language=='es':

        final_document_array_en = ""
       # print('result en is :',result_again["Body"].read().splitlines())
        for line_en in result_en["Body"].read().splitlines():
           # print(' line en is :',line_en)
            each_line_en = line_en.decode('utf-8')
        #    print("Input Line en: ",each_line_en)
            if(each_line_en!=''):
                translated_en=translate_text(each_line_en, 'en')
               # print("After translation : ",translated_en)
                final_document_array_en+=translated_en
                final_document_array_en+='\n\n'

       # print('the en result is :',final_document_array_en)
        s3_client.put_object(Body=final_document_array_en, Bucket='output-translate-bucket-project', Key='en_'+file_name)


        final_document_array_fr = ""
        for line_fr in result_fr["Body"].read().splitlines():
            #print(' line es is :',line_fr)
            each_line_fr = line_fr.decode('utf-8')
            #print("Input Line es: ",each_line_fr)
            if(each_line_fr!=''):
                translated_fr=translate_text(each_line_fr, 'fr')
              #  print('the trans is :',get_info(each_line_fr, 'fr'))
               # print("After translation : ",translated_fr)
                final_document_array_fr+=translated_fr
                final_document_array_fr+='\n\n'
       # print('the es result is :',final_document_array_fr)
        s3_client.put_object(Body=final_document_array_fr, Bucket='output-translate-bucket-project', Key='fr_'+file_name)

        final_document_array_po = ""
        for line_po in result_po["Body"].read().splitlines():
            #print(' line es is :',line_es)
            each_line_po = line_po.decode('utf-8')
            #print("Input Line es: ",each_line_po)
            if(each_line_po!=''):
                translated_po=translate_text(each_line_po, 'pt')
               # print("After translation : ",translated_po)
                final_document_array_po+=translated_po
                final_document_array_po+='\n\n'
       # print('the es result is :',final_document_array_po)
        s3_client.put_object(Body=final_document_array_po, Bucket='output-translate-bucket-project', Key='po_'+file_name)
        dic['file']=file_name
        dic['path_srt_fr']="https://convertion-html-to-srt.s3.us-east-2.amazonaws.com/fr_"+file_name.replace('.html','.srt')
        dic['path_srt_en']="https://convertion-html-to-srt.s3.us-east-2.amazonaws.com/en_"+file_name.replace('.html','.srt')
        dic['path_srt_po']="https://convertion-html-to-srt.s3.us-east-2.amazonaws.com/po_"+file_name.replace('.html','.srt')
        dic['path_srt_es']=""
        dic['file_srt_en']=final_document_array_en
        dic['file_srt_es']=""
        dic['file_srt_po']=final_document_array_po
        dic['file_srt_fr']=final_document_array_fr

    if source_language=='pt':

        final_document_array_en = ""
       # print('result en is :',result_again["Body"].read().splitlines())
        for line_en in result_en["Body"].read().splitlines():
           # print(' line en is :',line_en)
            each_line_en = line_en.decode('utf-8')
        #    print("Input Line en: ",each_line_en)
            if(each_line_en!=''):
                translated_en=translate_text(each_line_en, 'en')
               # print("After translation : ",translated_en)
                final_document_array_en+=translated_en
                final_document_array_en+='\n\n'

        #print('the en result is :',final_document_array_en)
        s3_client.put_object(Body=final_document_array_en, Bucket='output-translate-bucket-project', Key='en_'+file_name)


        final_document_array_fr = ""
        for line_fr in result_fr["Body"].read().splitlines():
            #print(' line es is :',line_fr)
            each_line_fr = line_fr.decode('utf-8')
            #print("Input Line es: ",each_line_fr)
            if(each_line_fr!=''):
                translated_fr=translate_text(each_line_fr, 'fr')
               # print("After translation : ",translated_fr)
                final_document_array_fr+=translated_fr
                final_document_array_fr+='\n\n'
        #print('the es result is :',final_document_array_fr)
        s3_client.put_object(Body=final_document_array_fr, Bucket='output-translate-bucket-project', Key='fr_'+file_name)

        final_document_array_es = ""
        for line_es in result_es["Body"].read().splitlines():
            #print(' line es is :',line_es)
            each_line_es = line_es.decode('utf-8')
            #print("Input Line es: ",each_line_es)
            if(each_line_es!=''):
                translated_es=translate_text(each_line_es, 'es')
               # print("After translation : ",translated_es)
                final_document_array_es+=translated_es
                final_document_array_es+='\n\n'
        #print('the es result is :',final_document_array_es)
        s3_client.put_object(Body=final_document_array_es, Bucket='output-translate-bucket-project', Key='es_'+file_name)
        dic['file']=file_name
        dic['path_srt_fr']="https://convertion-html-to-srt.s3.us-east-2.amazonaws.com/fr_"+file_name.replace('.html','.srt')
        dic['path_srt_es']="https://convertion-html-to-srt.s3.us-east-2.amazonaws.com/es_"+file_name.replace('.html','.srt')
        dic['path_srt_en']="https://convertion-html-to-srt.s3.us-east-2.amazonaws.com/en_"+file_name.replace('.html','.srt')
        dic['path_srt_po']=""
        dic['file_srt_en']=final_document_array_en
        dic['file_srt_es']=final_document_array_es
        dic['file_srt_po']=""
        dic['file_srt_fr']=final_document_array_fr


    print('done !!')

    print('the dict is :',dic)


    url = "http://173.212.199.208:3000/interface/s3_output/"
    #data = {'file_s3_url': 'https://input-transcribe-bucket.s3.us-east-2.amazonaws.com/143f84f90419473c8fbff35234394790_2023_03_14_12_09_52.mp4', 'language': 'en-US', 'srt_file': 'https://output-transcribe-bucket.s3.us-east-2.amazonaws.com/143f84f90419473c8fbff35234394790_2023_03_14_12_09_52.mp4-cc0f7b50-2680-460b-8ef6-46b72a81805e.srt'}
    headers = {"Content-type": "application/json"}

    #response = requests.put(url, data=json.dumps(data), headers=headers)
    response = requests.put(url, data=json.dumps(dic), headers=headers)

    print(response.text)

    print('post data is done')
