import calendar
import re
import time

from channel import Channel


def get_license_info():
    return {
        "source": "https://github.com/LaQuay/TDTChannels",
        "url": "https://github.com/LaQuay/TDTChannels/blob/master/LICENSE"
    }


def get_current_timestamp():
    return calendar.timegm(time.gmtime())


def stringbetween(text, start, end):
    result = re.search('(?<=' + start + ')(.*)(?=' + end + ')', text, re.DOTALL)
    return result.group(1)


def stringbetweenparantheses(text):
    return text.split("(")[1].split(")")[0]


def get_tv_channels_from_part(text):
    line_where_first_channel_starts = 15
    attributes_per_item = 6
    list_to_iterate = text.split("|")[line_where_first_channel_starts:-1]
    while "\n" in list_to_iterate:
        list_to_iterate.remove("\n")
    channel_list = []
    for i in range(0, len(list_to_iterate), attributes_per_item):
        item_name = list_to_iterate[i].strip()

        item_options = list_to_iterate[i + 1].strip()

        item_web = list_to_iterate[i + 2].strip()
        if len(item_web) > 0 and item_web[0] != "-":
            item_web = stringbetweenparantheses(item_web)
        if len(item_web) == 1:
            item_web = None

        if "HD" in item_name:
            item_resolution = "HD"
        else:
            item_resolution = "SD"

        item_logo = list_to_iterate[i + 3].strip()
        if len(item_logo) > 0 and item_logo[0] != "-":
            item_logo = stringbetweenparantheses(item_logo)
        if len(item_logo) == 1:
            item_logo = None

        item_epg = list_to_iterate[i + 4].strip()
        if len(item_epg) == 1:
            item_epg = None

        item_extra_info = list_to_iterate[i + 5].strip()
        if len(item_extra_info) == 1:
            item_extra_info = []
        else:
            item_extra_info = item_extra_info.split(",")

        channel = Channel(item_name, item_web, item_resolution, item_logo, item_epg, item_extra_info)
        item_options = item_options.split(" - ")
        if len(item_options) > 0 and item_options[0] != "-":
            for option in item_options:
                format = (option[1:5]).replace("]", "")
                url = stringbetweenparantheses(option)
                if "# GEO" in option:
                    more_info = ["GEO"]
                else:
                    more_info = []
                channel.add_option(format, url, more_info)
        channel_list.append(channel)
    return channel_list


def get_radio_channels_from_part(text):
    line_where_first_channel_starts = 13
    attributes_per_item = 5
    list_to_iterate = text.split("|")[line_where_first_channel_starts:-1]
    while "\n" in list_to_iterate:
        list_to_iterate.remove("\n")
    channel_list = []
    for i in range(0, len(list_to_iterate), attributes_per_item):
        item_name = list_to_iterate[i].strip()

        item_options = list_to_iterate[i + 1].strip()

        item_web = list_to_iterate[i + 2].strip()
        if len(item_web) > 0 and item_web[0] != "-":
            item_web = stringbetweenparantheses(item_web)
        if len(item_web) == 1:
            item_web = None

        item_logo = list_to_iterate[i + 3].strip()
        if len(item_logo) > 0 and item_logo[0] != "-":
            item_logo = stringbetweenparantheses(item_logo)
        if len(item_logo) == 1:
            item_logo = None

        item_extra_info = list_to_iterate[i + 4].strip()
        if len(item_extra_info) == 1:
            item_extra_info = []
        else:
            item_extra_info = item_extra_info.split(",")

        channel = Channel(item_name, item_web, None, item_logo, None, item_extra_info)
        item_options = item_options.split(" - ")
        if len(item_options) > 0 and item_options[0] != "-":
            for option in item_options:
                format = (option[1:5]).replace("]", "")
                url = stringbetweenparantheses(option)
                channel.add_option(format, url, [])
        channel_list.append(channel)
    return channel_list