#!/usr/bin/env python

from console import ScreepsConsole
from memorystats import ScreepsMemoryStats

import logging
import multiprocessing
import os
from settings import getSettings
import signal
import lockfile
import threading
import time


base_directory = os.path.expanduser('~')
if not os.path.exists(base_directory):
    os.makedirs(base_directory)


class App():

    def __init__(self):
        self.stdin_path = '/dev/null'
        self.stdout_path = '/dev/null'
        #self.stdout_path = base_directory + '/screepsstats.out'
        self.stderr_path = base_directory + '/screepsstats.err'
        self.pidfile_path =  base_directory + '/screepsstats.pid'
        self.pidfile_timeout = 5


    def run(self):
        logging.basicConfig(level=logging.WARN)
        logger = logging.getLogger("ScreepsStats")
        logger.setLevel(logging.INFO)
        formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
        handler = logging.FileHandler(base_directory + "/screepsstats.log")
        handler.setFormatter(formatter)
        logger.addHandler(handler)
        websocketprocess = False
        apiprocess = False
        while True:

            if not websocketprocess or not websocketprocess.is_alive():
                websocketprocess = WebsocketProcess()
                websocketprocess.daemon = True
                websocketprocess.start()

            if not apiprocess or not apiprocess.is_alive():
                apiprocess = APIProcess()
                apiprocess.daemon = True
                apiprocess.start()

            time.sleep(3)


class WebsocketProcess(multiprocessing.Process):

    def run(self):
        logging.basicConfig(level=logging.WARN)
        logger = logging.getLogger("ScreepsStats")
        logger.setLevel(logging.WARN)
        settings = getSettings()
        screepsconsole = ScreepsConsole(user=settings['screeps_username'], password=settings['screeps_password'], ptr=settings['screeps_ptr'])
        screepsconsole.start()


class APIProcess(multiprocessing.Process):

    def run(self):
        logging.basicConfig(level=logging.WARN)
        logger = logging.getLogger("ScreepsStats")
        logger.setLevel(logging.WARN)
        settings = getSettings()
        screepsapi = ScreepsMemoryStats(u=settings['screeps_username'], p=settings['screeps_password'], ptr=settings['screeps_ptr'])
        screepsapi.run_forever()





if __name__ == "__main__":
    app = App()
    app.run()