import os, glob, sys,time, subprocess, json
import logging
from importlib import reload
reload(logging)
import coloredlogs
import sqlalchemy
import concurrent.futures
from datetime import datetime, timedelta
from dotenv import load_dotenv
load_dotenv()


def with_ffprobe(filename):

    result = subprocess.check_output(
            f'ffprobe -v quiet -show_streams -select_streams v:0 -of json "{filename}"',
            shell=True).decode()
    fields = json.loads(result)['streams'][0]
    return float(fields['duration'])


time_to_insert=os.getenv('minutes')
ad_duration=os.getenv('add_duration')

#print('time is ',time_to_insert)
#print('add is ',ad_duration)


logging.getLogger('sqlalchemy').setLevel(logging.ERROR)
logger = logging.getLogger(__name__)
fh = logging.FileHandler('log_file.log')
fh.setLevel(logging.INFO)
formatter = coloredlogs.ColoredFormatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
logger.addHandler(fh)
coloredlogs.install(level='INFO')

with open("last_time_inserted.json", "r+") as jsonFile:
    data = json.load(jsonFile)

last_time_inserted=data['last_time_inserted']

segment = str(sys.argv[1])

current_date=datetime.now()

with open("credit.json", "r+") as jsonFile1:
        data_credit = json.load(jsonFile1)

if current_date.hour==2 and data_credit['credit']<30:
    logger.info("we do not insert !")
    pass

else:
    #print("1 ",type((current_date-datetime.strptime(last_time_inserted, '%Y-%m-%d %H:%M:%S.%f')).seconds/60))
    #print(type(time_to_insert))
    if (current_date-datetime.strptime(last_time_inserted, '%Y-%m-%d %H:%M:%S.%f')).seconds/60>=float(time_to_insert):
        30.0

        #os.system("echo '#EXT-X-CUE-OUT:DURATION="+str(float(ad_duration))+"' >> result.m3u8")
        os.system("echo '#EXT-X-DISCONTINUITY' >> result.m3u8")
        os.system("echo '#EXT-X-CUE-OUT' >> result.m3u8")
        os.system("echo '#EXT-X-DISCONTINUITY' >> result.m3u8")

        with open("aad_break_duration.json", "r+") as jsonFile2:
            data_duration = json.load(jsonFile2)
        data_duration['ad_break_duration']=str(current_date+timedelta(seconds=int(ad_duration)))
        jsonFile2 = open("aad_break_duration.json", "w+")
        jsonFile2.write(json.dumps(data_duration))
        jsonFile2.close()
        #if (datetime.strptime(last_time_inserted, '%Y-%m-%d %H:%M:%S.%f')+timedelta(seconds=int(ad_duration)))>=current_date:
        if datetime.strptime(last_time_inserted, '%Y-%m-%d %H:%M:%S.%f')>current_date:

            duration=with_ffprobe("hiwar_hls/"+segment)
            os.system("echo '#EXTINF:"+str(duration)+",'  >> result.m3u8")
            os.system("echo 'hiwar_hls/"+segment+"'  >> result.m3u8")
 
        else:
        
        
        # for i in range(4):
        #     duration=with_ffprobe("WU_Ramadan_Fee.mp4")
        #     os.system("echo '#EXTINF:"+str(duration)+",'  >> result.m3u8")
        #     os.system("echo 'WU_Ramadan_Fee.mp4' >> result.m3u8")
            #os.system("echo '#EXT-X-DISCONTINUITY' >> result.m3u8")
            os.system("echo '#EXT-X-CUE-IN' >> result.m3u8")

            logger.info('the ad break is inserted')

            with open("last_time_inserted.json", "r+") as jsonFile:
                data = json.load(jsonFile)
            data['last_time_inserted']=str(current_date)
            jsonFile = open("last_time_inserted.json", "w+")
            jsonFile.write(json.dumps(data))
            jsonFile.close()

            logger.info('the last_time_inserted is updated')

            duration=with_ffprobe("hiwar_hls/"+segment)
            os.system("echo '#EXTINF:"+str(duration)+",'  >> result.m3u8")
            os.system("echo 'hiwar_hls/"+segment+"'  >> result.m3u8")

            with open("credit.json", "r+") as jsonFile1:
                data_credit = json.load(jsonFile1)

            data_credit['credit']=int(data_credit['credit'])+int(ad_duration)
            jsonFile1 = open("credit.json", "w+")
            jsonFile1.write(json.dumps(data_credit))
            jsonFile1.close()
            logger.info('ad credit to the credit json')



    if (current_date-datetime.strptime(last_time_inserted, '%Y-%m-%d %H:%M:%S.%f')).seconds/60<float(time_to_insert):

        duration=with_ffprobe("hiwar_hls/"+segment)
        os.system("echo '#EXTINF:"+str(duration)+",'  >> result.m3u8")
        os.system("echo 'hiwar_hls/"+segment+"'  >> result.m3u8")









#level3

# if data_level['level']==3 and data_level['insert_new_adbreak']=="on":

#     data_level['insert_new_adbreak']="off"
#     data_level['inside_adbreak']="yes"
#     jsonFile4= open("data.json", "w+")
#     jsonFile4.write(json.dumps(data_level))
#     jsonFile4.close()



#     random_file=random.choice(os.listdir("ts_videos_of_jingles"))
#     os.system("echo '#EXT-X-DISCONTINUITY' >> result.m3u8")
#     os.system("echo '#EXTINF:3.160000,'  >> result.m3u8")
#     os.system("echo 'ts_videos_of_jingles/"+random_file+"'  >> result.m3u8")

#     os.system("echo '#EXT-X-CUE-OUT' >> result.m3u8")

#     res= data_level['adbreak_duration']/3
#     num= res if data_level['adbreak_duration']%3==0 else int(res)+1
#     # if data_level['adbreak_duration']%3==0:
#     #     num=res
#     # else:
#     #     num=int(res)+1
#     for i in range(num):

#         os.system("echo '#EXTINF:3.000000,'  >> result.m3u8")
#         os.system("echo 'output_3s.ts'  >> result.m3u8")

#     os.system("echo '#EXT-X-CUE-IN' >> result.m3u8")
#     os.system("echo '#EXT-X-DISCONTINUITY' >> result.m3u8")
#     os.system("echo '#EXTINF:3.160000,'  >> result.m3u8")
#     os.system("echo 'ts_videos_of_jingles/"+random_file+"'  >> result.m3u8")   
#     os.system("echo '#EXT-X-DISCONTINUITY' >> result.m3u8")

#     #data_level['dept_in_seconds']=data_level['dept_in_seconds']+data_level['adbreak_duration']
#     data_level['dept_in_seconds']=data_level['dept_in_seconds']+num*3
#     data_level['inside_adbreak']="no"
#     jsonFile4= open("data.json", "w+")
#     jsonFile4.write(json.dumps(data_level))
#     jsonFile4.close()