#!/usr/bin/python
"""
PLoader - a pure cli-based download manager

"""

from ploader.link_loader import LinkLoader
from ploader.server import Server
import ploader.utils as utils

import asyncore, threading, time, argparse, os


def main():
	# setup argparse
	parser = argparse.ArgumentParser(description='CLI download manager written in python')
	user_dir = os.path.expanduser('~')
	default_config_path = '%s/.ploader.conf' % user_dir
	parser.add_argument(
		'-f',
		'--config',
		help='Specify path to config',
		default=default_config_path
	)
	args = parser.parse_args()
	utils.set_config_path(args.config)

	# setup program
	settings = utils.load_config()

	link_handler = LinkLoader("link_list.ploader")

	def handle_net_input(data):
		answ = "Thank you"

#		print("Received: " + str(data))
		if "download" in data.keys():
			cur = data["download"]
			link_handler.create_download(cur["name"], cur["links"], cur["passwd"])
			answ = "Added links"
		elif "status" in data.keys():
			cur = data["status"]
			answ = str(link_handler)

		return answ

	server = Server('0.0.0.0', settings["port"])
	server.set_callback(handle_net_input)

	server = threading.Thread(target = asyncore.loop)
	server.daemon = True
	server.start()
	print("Server running")

	while True:
		next_dw = link_handler.get_unstarted_download()
		if next_dw != None:
			next_dw.download()
			next_dw.unpack()
		else:
			time.sleep(10)


if __name__ == "__main__":
	main()