#!/usr/bin/env python
"""LICENSE
Copyright 2016 Hermann Krumrey <hermann@krumreyh.com>

This file is part of xdcc-dl.

xdcc-dl is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

xdcc-dl is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with xdcc-dl.  If not, see <http://www.gnu.org/licenses/>.
LICENSE"""

# imports
import os
import argparse
from xdcc_dl.xdcc import download_packs
from xdcc_dl.helper import set_throttle_value, set_logging_level, prepare_packs
from xdcc_dl.entities import XDCCPack
from xdcc_dl.logging import Logger
from xdcc_dl.xdcc.exceptions import DownloadIncomplete


def main():
    """
    Starts the main method of the program

    :return: None
    """
    parser = argparse.ArgumentParser()
    parser.add_argument("message",
                        help="An XDCC Message. Supports ranges (1-100), "
                             "ranges with steps (1-100;2) as well as "
                             "comma-separated packs: (1,2,3).")
    parser.add_argument("-s", "--server",
                        default="irc.rizon.net",
                        help="Specifies the IRC Server. "
                             "Defaults to irc.rizon.net")
    parser.add_argument("-o", "--out",
                        help="Specifies the target file. "
                             "Defaults to the pack's file name. "
                             "When downloading multiple packs, index "
                             "numbers will be appended to the filename")
    parser.add_argument("-v", "--verbose", action="store_true",
                        help="Sets the verbosity of the program to INFO")
    parser.add_argument("-d", "--debug", action="store_true",
                        help="Sets the verbosity of the program to DEBUG")
    parser.add_argument("-q", "--quiet", action="store_true",
                        help="Disables all output")
    parser.add_argument("-t", "--throttle",
                        help="Limits the download speed of xdcc-dl. "
                             "Append K,M or G for more convenient units")
    args = parser.parse_args()

    try:
        set_logging_level(args.quiet, args.verbose, args.debug)
        set_throttle_value(args.throttle)

        packs = XDCCPack.from_xdcc_message(
            args.message, os.getcwd(), args.server
        )
        prepare_packs(packs, args.out)

        download_packs(packs)

    except KeyboardInterrupt:
        Logger().print("Thanks for using xdcc-dl!")
    except DownloadIncomplete:
        Logger().warning("Download incomplete.")
        Logger().print("Thanks for using xdcc-dl!")


if __name__ == "__main__":
    main()
