#!/usr/bin/env python2.7
# This Python file uses the following encoding: utf-8
from datetime import datetime, timedelta
import sys
import os

reload(sys)  # Reload does the trick!
sys.setdefaultencoding('UTF8')

# Новата структура на канали с IP и номер
channels = {
				'24 Kitchen HD': 'http://195.170.166.52:88/archive/1886',
				'24Kitchen': 'http://195.170.166.51:88/archive/1977',
'7_8 TV HD': 'http://195.170.166.52:88/archive/5602',
'ALPHA': 'http://195.170.166.51:88/archive/2407',
'amc': 'http://195.170.166.51:88/archive/2166',
'Animal Planet': 'http://195.170.166.51:88/archive/1983',
'ANT1': 'http://195.170.166.51:88/archive/2408',
'aTV': 'http://195.170.166.51:88/archive/3970',
'Automotor Sport Channel': 'http://195.170.166.52:88/archive/1936',
'AXN': 'http://195.170.166.51:88/archive/1966',
'AXN Black': 'http://195.170.166.51:88/archive/1968',
'AXN White': 'http://195.170.166.51:88/archive/1967',
'BBC One HD': 'http://195.170.166.52:88/archive/3376',
'BHTV': 'http://195.170.166.51:88/archive/6256',
'BNT 1': 'http://195.170.166.51:88/archive/1879',
'BNT 1 HD': 'http://195.170.166.52:88/archive/6069',
'BNT 2': 'http://195.170.166.51:88/archive/1880',
'BNT 2 HD': 'http://195.170.166.52:88/archive/4451',
'BNT 3 HD': 'http://195.170.166.51:88/archive/5090',
'BNT 4': 'http://195.170.166.51:88/archive/1881',
'BNT 4 HD': 'http://195.170.166.52:88/archive/5942',
'bTV': 'http://195.170.166.51:88/archive/1872',
'bTV Action': 'http://195.170.166.51:88/archive/1874',
'bTV Action HD': 'http://195.170.166.52:88/archive/1906',
'bTV Cinema': 'http://195.170.166.51:88/archive/1877',
'bTV Cinema HD': 'http://195.170.166.52:88/archive/5890',
'bTV Comedy': 'http://195.170.166.51:88/archive/5984',
'bTV Comedy HD': 'http://195.170.166.52:88/archive/5936',
'bTV HD': 'http://195.170.166.52:88/archive/1905',
'bTV Story': 'http://195.170.166.51:88/archive/1878',
'C&I Network': 'http://195.170.166.51:88/archive/2094',
'Cartoon Network': 'http://195.170.166.51:88/archive/3645',
'Cartoonito': 'http://195.170.166.51:88/archive/3644',
'Channel 5': 'http://195.170.166.51:88/archive/3018',
'Channel 5 HD': 'http://195.170.166.52:88/archive/3023',
'Cinemania SD': 'http://195.170.166.51:88/archive/5991',
'Cinemax': 'http://195.170.166.51:88/archive/1973',
'Cinemax 2': 'http://195.170.166.51:88/archive/1974',
'Cinemax 2 HD': 'http://195.170.166.52:88/archive/1924',
'Cinemax HD': 'http://195.170.166.52:88/archive/1923',
'Diema': 'http://195.170.166.52:88/archive/1959',
'Diema Family': 'http://195.170.166.51:88/archive/1960',
'Diema Family HD': 'http://195.170.166.52:88/archive/6071',
'Diema HD': 'http://195.170.166.52:88/archive/6072',
'Diema Sport 2': 'http://195.170.166.51:88/archive/1962',
'Diema Sport 2 HD': 'http://195.170.166.52:88/archive/1938',
'Diema Sport 3': 'http://195.170.166.51:88/archive/5930',
'Diema Sport 3 HD 50p': 'http://195.170.166.52:88/archive/1941',
'Diema Sport HD': 'http://195.170.166.52:88/archive/1937',
'Diema Sport SD': 'http://195.170.166.51:88/archive/1961',
'Discovery Channel': 'http://195.170.166.51:88/archive/2177',
'Discovery Channel HD': 'http://195.170.166.51:88/archive/5810',
'Disney Channel Bulgaria': 'http://195.170.166.51:88/archive/1984',
'Disney Jr': 'http://195.170.166.51:88/archive/1985',
'DR 1 HD': 'http://195.170.166.52:88/archive/4829',
'DR 2 HD': 'http://195.170.166.51:88/archive/3206',
'E4': 'http://195.170.166.52:88/archive/3775',
'Epic Drama': 'http://195.170.166.52:88/archive/5695',
'ERT 1': 'http://195.170.166.51:88/archive/2402',
'Eurosport': 'http://195.170.166.51:88/archive/1994',
'Eurosport 1 HD': 'http://195.170.166.52:88/archive/1935',
'Eurosport 2': 'http://195.170.166.51:88/archive/1995',
'Eurosport 2 HD': 'http://195.170.166.52:88/archive/1945',
'Film4': 'http://195.170.166.51:88/archive/3049',
'FilmBox': 'http://195.170.166.51:88/archive/4240',
'Food Network Channel': 'http://195.170.166.52:88/archive/1932',
'H2 HD': 'http://195.170.166.51:88/archive/5803',
'HBO': 'http://195.170.166.51:88/archive/1970',
'HBO 2': 'http://195.170.166.51:88/archive/1971',
'HBO 2 HD': 'http://195.170.166.52:88/archive/1921',
'HBO 3': 'http://195.170.166.51:88/archive/1972',
'HBO 3 HD': 'http://195.170.166.52:88/archive/1922',
'HBO HD': 'http://195.170.166.52:88/archive/1920',
'HGTV HD': 'http://195.170.166.51:88/archive/5931',
'History Channel': 'http://195.170.166.51:88/archive/2188',
'History Channel HD': 'http://195.170.166.51:88/archive/2335',
'ID Bulgaria': 'http://195.170.166.51:88/archive/5856',
'ITV 1 HD': 'http://195.170.166.52:88/archive/3380',
'ITV 2 HD': 'http://195.170.166.51:88/archive/3246',
'ITV 3 HD': 'http://195.170.166.51:88/archive/3256',
'Kanal 3 HD': 'http://195.170.166.51:88/archive/4109',
'Kanal D HD': 'http://195.170.166.51:88/archive/2328',
'Kino Nova': 'http://195.170.166.51:88/archive/1884',
'Kino Nova HD': 'http://195.170.166.52:88/archive/6073',
'Max Sport 1 HD': 'http://195.170.166.52:88/archive/4239',
'Max Sport 2 HD': 'http://195.170.166.52:88/archive/4397',
'Max Sport 3 HD': 'http://195.170.166.52:88/archive/5092',
'Max Sport 4 HD': 'http://195.170.166.52:88/archive/5201',
'MEGA': 'http://195.170.166.51:88/archive/5642',
'More4': 'http://195.170.166.51:88/archive/3248',
'Moviestar': 'http://195.170.166.51:88/archive/2008',
'Nat Geo Wild': 'http://195.170.166.51:88/archive/2013',
'Nat Geo Wild HD': 'http://195.170.166.51:88/archive/1913',
'National Geographic': 'http://195.170.166.51:88/archive/2154',
'National Geographic HD': 'http://195.170.166.51:88/archive/1912',
'Nick Jr': 'http://195.170.166.52:88/archive/5089',
'Nickelodeon': 'http://195.170.166.51:88/archive/2132',
'Nostalgia': 'http://195.170.166.51:88/archive/5840',
'Nova News': 'http://195.170.166.51:88/archive/2006',
'Nova News HD': 'http://195.170.166.51:88/archive/5795',
'Nova Sport': 'http://195.170.166.51:88/archive/1958',
'Nova Sport HD': 'http://195.170.166.52:88/archive/1939',
'Nova Tv': 'http://195.170.166.51:88/archive/1882',
'Nova Tv HD': 'http://195.170.166.52:88/archive/4826',
'Open Beyond': 'http://195.170.166.51:88/archive/2410',
'Ring': 'http://195.170.166.51:88/archive/1883',
'Ring HD': 'http://195.170.166.52:88/archive/1934',
'SHOW TV': 'http://195.170.166.51:88/archive/2041',
'SKAI': 'http://195.170.166.51:88/archive/2413',
'Sky News': 'http://195.170.166.51:88/archive/3272',
'Sky Sports Darts HD': 'http://195.170.166.52:88/archive/3150',
'Sky Sports Main Event HD': 'http://195.170.166.52:88/archive/5994',
'STAR': 'http://195.170.166.51:88/archive/2414',
'Star Channel': 'http://195.170.166.51:88/archive/1963',
'STAR Crime': 'http://195.170.166.51:88/archive/1965',
'Star Crime HD': 'http://195.170.166.52:88/archive/1928',
'Star HD': 'http://195.170.166.52:88/archive/1926',
'Star Life': 'http://195.170.166.51:88/archive/1964',
'Star life HD': 'http://195.170.166.52:88/archive/1927',
'STAR TV': 'http://195.170.166.51:88/archive/2320',
'TLC': 'http://195.170.166.51:88/archive/1982',
'TLC HD': 'http://195.170.166.51:88/archive/4527',
'TNT Sports 1 HD': 'http://195.170.166.52:88/archive/3264',
'TNT Sports 2 HD': 'http://195.170.166.52:88/archive/3260',
'TNT Sports 3 HD': 'http://195.170.166.52:88/archive/3266',
'Travel Channel HD': 'http://195.170.166.52:88/archive/1930',
'TV 1': 'http://195.170.166.51:88/archive/2367',
'TV1000 Bulgaria SD': 'http://195.170.166.51:88/archive/1975',
'Tv2 Charlie HD': 'http://195.170.166.52:88/archive/3116',
'Tv2 HD': 'http://195.170.166.52:88/archive/4868',
'Tv2 News HD': 'http://195.170.166.52:88/archive/3118',
'Tv3 HD': 'http://195.170.166.52:88/archive/3128',
'Tv3+ HD': 'http://195.170.166.52:88/archive/3127',
'tv8': 'http://195.170.166.51:88/archive/2292',
'U&Dave': 'http://195.170.166.51:88/archive/3172',
'Viasat Explore': 'http://195.170.166.51:88/archive/2164',
'Viasat Explore HD': 'http://195.170.166.51:88/archive/5900',
'Viasat History': 'http://195.170.166.51:88/archive/2165',
'Viasat History HD': 'http://195.170.166.51:88/archive/5809',
'Viasat Nature': 'http://195.170.166.51:88/archive/2227',
'Viasat Nature HD': 'http://195.170.166.51:88/archive/2368',
}

channel_list = list(channels.keys())  # Генериране на списък с имената на каналите


def print_line_m3u(num_ch, date_object, new_name_file):
    """
    Функция за добавяне на редове в M3U файла за определен канал и дата.
    """
    channel_name = channel_list[num_ch]
    base_url = channels[channel_name]  # Вземаме URL за текущия канал
    for i in range(24):  # Часове от 00 до 23
        with open(new_name_file, 'a') as ff:
            ff.write(
                "#EXTINF:-1 group-title=\"{}\",{} {} {:02d}\n{}/{}-{:02d}.mpg\n".format(
                    channel_name,
                    channel_name,
                    date_object,
                    i,  # Час
                    base_url,
                    date_object,
                    i  # Час
                )
            )


def main():
    new_name_file = '/storage/www/arx.m3u'  # Път до файла
    day_back = 1  # Дефолтна стойност

    if len(sys.argv) > 1:
        try:
            day_back = int(sys.argv[1])
        except ValueError:
            print("Invalid argument for day_back. Using default value 1.")

    today_date = (datetime.now() + timedelta(days=1)).strftime('%Y%m%d')
    pth = '/storage/www'

    # Създаване на директория, ако не съществува
    if not os.path.exists(pth):
        try:
            os.makedirs(pth)
        except OSError:
            print("Failed to create directory {}".format(pth))
            return

    # Създаване на нов M3U файл
    with open(new_name_file, 'w+') as file:
        file.write('#EXTM3U\n')

    # Генериране на M3U
    if len(sys.argv) > 3:
        for w in range(1, day_back + 1):
            date_object = (datetime.strptime(today_date, '%Y%m%d') - timedelta(w)).strftime('%Y%m%d')
            for q in range(3, len(sys.argv)):
                channel_index = int(sys.argv[q])
                print_line_m3u(channel_index, date_object, new_name_file)
    else:
        for w in range(1, day_back + 1):
            date_object = (datetime.strptime(today_date, '%Y%m%d') - timedelta(w)).strftime('%Y%m%d')
            for channel_index in range(len(channels)):
                print_line_m3u(channel_index, date_object, new_name_file)


if __name__ == "__main__":
    main()
