#!/usr/bin/env python

import os
import sys
import argparse
import json

from absinthe import dirs, init_data_dir
from absinthe.tools.logger import get_logger
from absinthe.tools.config import Config
from absinthe.tools.remote_process_manager import RemoteProcessManager

parser = argparse.ArgumentParser()
parser.add_argument('command', type=str, choices=['start', 'stop', 'restart', 'status'])
args = parser.parse_args()

init_data_dir()

config_data = {}
with open(dirs.config_file) as f:
    config_data = json.load(f)

# init logger
logger = get_logger(config_data['logger'], 'init')
logger.info("Absinthe server manager script")

# init config
try:
    config = Config(logger)
    config.load(config_data['server'])
    logger.info('Config has been successfully loaded')
except Exception as e:
    logger.error('Exception occured during config parsing: ' + str(e))
    sys.exit(1)

# create manager
mgr = RemoteProcessManager(
    ['python', dirs.server_listener],
    config.data['command_server']['port'].value,
    os.path.join(dirs.data_dir, 'server.pid'),
    logger
)
command = getattr(mgr, args.command)

try:
    response = command()
    logger.info(response.message)
except Exception as e:
    raise
