#!python
"""The TV Channel List module."""

import argparse
import logging
import sys

from tvchannellist import ChannelList

_LOGGER = logging.getLogger()


def set_logging(debug):
    """Set logging."""
    level = logging.INFO
    if debug:
        level = logging.DEBUG

    console = logging.StreamHandler()
    console.setLevel(level)
    formatter = logging.Formatter(
        "%(asctime)s %(name)-12s: %(levelname)-8s %(message)s", "%Y-%m-%d %H:%M:%S"
    )
    console.setFormatter(formatter)

    _LOGGER.addHandler(console)
    _LOGGER.setLevel(logging.DEBUG)


def main():
    """ChannelList main program."""
    parser = argparse.ArgumentParser(formatter_class=argparse.RawTextHelpFormatter)
    parser.add_argument(
        "command",
        help="""Supported commands:
* providers       --> Get Provider channel_list
* channels        --> Get Channel channel_list
* <ChannelName>   --> Get LCN of input channel
""",
    )
    parser.add_argument("--debug", default=False, help="Enable debug")
    parser.add_argument("--country", help="Selected Country")
    parser.add_argument("--zipcode", help="Selected ZipCode")
    parser.add_argument("--provider", help="Selected Provider ID")
    parser.add_argument("--override", help="Channel override option (name:lcn)")
    args = parser.parse_args()

    set_logging(args.debug)

    if not args.country:
        _LOGGER.error("Missing Country")
        sys.exit(0)

    channel_list = ChannelList()
    channel_list.load_engine(args.country, args.zipcode)

    providers = channel_list.get_providers()

    if args.command == "providers":
        _LOGGER.info("Provider channel_list:")
        idx = 0
        if providers:
            for provider in providers:
                _LOGGER.info("%d : %s", idx, provider)
                idx = idx + 1
        else:
            _LOGGER.info(
                "No Provider found for country %s zip: %s", args.country, args.zipcode
            )
        sys.exit(0)
    else:
        if not args.provider and channel_list.is_provider_required():
            _LOGGER.error("Missing Provider")
            sys.exit(0)

    if providers:
        channel_list.set_provider(providers[int(args.provider)])

    if args.override:
        split = args.override.split(":", 2)
        channel_list.override_channel(split[0], int(split[1]))

    channel_list.load_channels()

    if args.command == "channels":
        _LOGGER.info("Channel channel_list:")
        idx = 0
        for data in channel_list.engine.lookup:
            _LOGGER.info("%d : %s", idx, data)
            idx = idx + 1
    else:
        _LOGGER.info("Getting LCN of channel %s", args.command)
        _LOGGER.info("Normal => %s", channel_list.get_channel(args.command))
        _LOGGER.info("HD => %s", channel_list.get_channel(args.command, True))


if __name__ == "__main__":
    main()
