#!/usr/bin/env python
# -*- coding: utf-8 -*-

from __future__ import print_function
import argparse
import cookielib
import getpass
import os
import sys
from u115 import API
from u115 import __version__ as VERSION
from u115.conf import COOKIES_FILENAME


# SOCKS proxy
if os.environ.get('PROXY_ADDR'):
    proxy_addr = os.environ.get('PROXY_ADDR')
    proxy_port = int(os.environ.get('PROXY_PORT'))
    import socket
    import socks
    socks.set_default_proxy(socks.SOCKS5, proxy_addr, proxy_port)
    socket.socket = socks.socksocket


SAVE_COOKIES = False


def parse_args():
    parser = argparse.ArgumentParser(prog='115up')
    group1 = parser.add_mutually_exclusive_group(required=True)
    parser.add_argument('-c', '--cookies', action='store_true',
                        help="log in and save cookies to ~/.115cookies")
    group1.add_argument('-l', '--link',
                        help="link resource (HTTP, FTP, eD2k or Magnet)")
    group1.add_argument('-t', '--torrent',
                        help="torrent file")
    group2 = parser.add_mutually_exclusive_group(required=False)
    group2.add_argument('-u', '--username', help='account or username')
    group2.add_argument('-d', '--section', default='default',
                        help='section name in credential file')
    group1.add_argument('-v', '--version', action='store_true', default=False,
                        help="print version and exit")
    args = parser.parse_args()
    return args


def init_api(username, password, section):
    """Initialize API and authenticate via cookies or credentials"""
    if SAVE_COOKIES is True:
        api = API()
        api._init_cookies()
        api.login(username, password, section)
        api.save_cookies()
        sys.exit()
    elif os.path.exists(COOKIES_FILENAME):
        try:
            api = API(persistent=True)
        except cookielib.LoadError:
            print('Cannot read cookies from %s. ' % COOKIES_FILENAME)
            print('Use -c option to save cookies and try again.')
            sys.exit(2)
        if api.has_logged_in:
            print('API has logged in from cookies.')
        else:
            print('API fails to log in from cookies.')
            print('Use -c option to save cookies and try again.')
            sys.exit(1)
    else:
        api = API()
        api.login(username, password, section)
    return api


def add_new_task(args):
    password = None
    if args.username is not None:
        password = getpass.getpass()
    api = init_api(args.username, password, args.section)
    if args.torrent is not None:
        r = api.add_task_bt(args.torrent)
    elif args.link is not None:
        r = api.add_task_url(args.link)
    if r:
        print('Task is successfully created.')
    tasks = api.get_tasks()
    t1 = tasks[0]
    print(t1, t1.status_human)


def main():
    args = parse_args()
    global SAVE_COOKIES
    SAVE_COOKIES = args.cookies
    if args.version:
        print(VERSION)
        sys.exit()
    add_new_task(args)


if __name__ == '__main__':
    main()
