#!/usr/bin/env python3
#
#

""" run multiple bot instances in 1 program. """

## bootstrap

import warnings
warnings.simplefilter("ignore")

import os, sys, logging
sys.path.insert(0, os.getcwd())

## basic imports

import logging
import time
import signal


## options parser

from fbf.utils.opts import makefleetopts

opts = makefleetopts()

from fbf.lib.datadir import setdatadir, getdatadir
if opts.datadir: setdatadir(opts.datadir)

from fbf.version import getversion
print(getversion('FLEET'))

## fbf imports

from fbf.lib.partyline import partyline
from fbf.lib.datadir import makedirs
from fbf.lib.boot import boot
from fbf.lib.exit import globalshutdown
from fbf.utils.mainloop import mainloop
from fbf.lib.users import users_boot
from fbf.lib.threads import start_new_thread
from fbf.utils.exception import handle_exception
import fbf

## loglevel

from fbf.utils.log import setloglevel
setloglevel(opts.loglevel or "warn", not opts.nocolors) 

from fbf.lib.fleet import getfleet
fleet = getfleet(opts.datadir)
if opts.all or opts.show:
    avail = fleet.avail()
    if avail: sys.stdout.write("available bots: " + ", ".join(avail) + ".\n")
    else: sys.stdout.write("no bots available.\n")

if opts.all: print("") ; os._exit(0)

# provide sigterm support
def dostop(a, b):
    """ sig handler """
    globalshutdown()

signal.signal(signal.SIGTERM, dostop)

## start the fleet

boot(opts.datadir)

if opts.owner:
    users = users_boot()
    users.make_owner(opts.owner)

def doresume():
    try:
        fleet.resume(opts.doresume)
        fleet.startok.wait()
        partyline.resume(opts.doresume)
        time.sleep(1)
        os.unlink(opts.doresume)
    except: handle_exception()

thr = None

if opts.doresume: start_new_thread(doresume, ())
else: fleet.boot(opts.args, ["tornado", "console"])
if not fleet.bots: logging.error("fleet - no bots found.") ; os._exit(1)

if opts.api:
    from jsb.api import server
    server.runapiserver(opts.apiport)
else: mainloop()
