#!/usr/bin/env python3

from emojirades.bot import EmojiradesBot

import argparse
import logging
import slack
import sys


if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("-v", "--verbose", action="count", default=0, help="Logging level")
    parser.add_argument("--log-file", default=sys.stderr, help="File we will log to")

    subparsers = parser.add_subparsers(help="Workspaces Mode", dest="mode")
    subparsers.required = True

    # Single Workspace
    parser_single = subparsers.add_parser("single", help="Single Workspace")
    parser_single.add_argument("--score-file", help="JSON file we use to persist scores", required=True)
    parser_single.add_argument("--state-file", help="JSON file we use to persist game state", required=True)
    parser_single.add_argument("--auth-file", help="JSON file we use to store auth config", required=True)

    # Multiple Workspaces
    parser_multiple = subparsers.add_parser("multiple", help="Multiple Workspaces")
    parser_multiple.add_argument("--workspaces-dir", help="Folder path we persist workspaces to", required=True)
    parser_multiple.add_argument("--workspace-id", dest="workspace_ids", action="append", help="Specific workspace IDs")
    parser_multiple.add_argument("--onboarding-queue", help="SQS queue containing new workspaces to onboard", required=False)

    args = parser.parse_args()

    if args.verbose >= 2:
        log_level = logging.DEBUG
    elif args.verbose >= 1:
        log_level = logging.INFO
    else:
        log_level = logging.WARNING

    logging.basicConfig(level=log_level)
    logger = logging.getLogger("Emojirades")

    bot = EmojiradesBot()

    # Register the event callback
    slack.RTMClient.on(event="message", callback=bot.handle_event)

    # Configure the bot mode
    if args.mode == "single":
        logger.debug("Configurating for Single Workspace mode")
        bot.configure_workspace(args.score_file, args.state_file, args.auth_file)
    elif args.mode == "multiple":
        logger.debug("Configurating for Multiple Workspace mode")
        bot.configure_workspaces(args.workspaces_dir, args.workspace_ids, args.onboarding_queue)
    else:
        parser.error("Unknown mode")

    logger.info("Bot is listening for commands")
    bot.listen_for_commands()
