#!python
from concurrent.futures import ThreadPoolExecutor
from flask import g
from flask_jsonrpc.proxy import ServiceProxy
from lnet.utils import BitcoinD, NodeFactory
from lnet.web import app as webapp
from signal import signal, SIGINT
import click
import daemon
import dot_parser
import os
import requests
import json
import sys


@click.group()
def cli():
    pass

from lockfile import LockFile


def server():
    running = False
    try:
        requests.get('http://localhost:5000/')
        running = True
    except Exception:
        pass
    
    if not running:
        os.system('lnet-daemon &')

    while not running:
        try:
            requests.get('http://localhost:5000/')
            running = True
        except Exception:
            pass
        
    return ServiceProxy('http://localhost:5000/api')


@click.command()
@click.argument('dotfile')
def start(dotfile):
    print(server().start(dotfile))

    
@click.command()
def stop():
    server().stop()


@click.command()
@click.argument('node_name')
@click.argument('method')
@click.argument('params', nargs=-1)
def node(node_name, method, params):
    res = server().node_rpc(node_name, method, params)
    json.dump(res, sys.stdout)
    

@click.command()
def alias():
    aliases = server().alias()['result']
    for name, path in aliases.items():
        print("alias lcli-{name}=\"lightning-cli --lightning-dir={path}\"".format(name=name, path=path))
    
    
@click.command()
def shutdown():
    print(server().shutdown())


if __name__ == "__main__":
    cli.add_command(start)
    cli.add_command(stop)
    cli.add_command(shutdown)
    cli.add_command(node)
    cli.add_command(alias)
    cli()
