#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
import sys
import argparse
import six
from msgiver.configure import Configure
from msgiver.slack import Slack

STATUS = { "success": 0, "failed_parse": 1, "failed_setting": 2, "failed_post": 3 }

def setting(args):
    try:
        configure = Configure()
        configure.generate()
        six.print_("Complete generate setting file.")
    except Exception as e:
        six.print_(e)
        exit(STATUS["failed_setting"])

def post_slack(args):
    try:
        options = { "pretty": 1, "username": "msgiver" }

        if args.icon:
            options["icon_url"] = args.icon

        if args.channel:
            options["channel"] = args.channel

        if args.syntax:
            args.message = "```\n%s\n```" % args.message

        slack = Slack(options)
        res = slack.post(args.message)
        six.print_("Complete Slack post message.")
        six.print_(res)
    except ValueError as e:
        six.print_(e)
        exit(STATUS["failed_post"])

def post_gitter(args):
    pass

def arg_parse():
    parser = argparse.ArgumentParser(description="msgiver will deliver the text to Messenger.")
    # parser_slack = parser.add_subparsers(title="slack", help="Slack post message")
    subparsers = parser.add_subparsers(help="sub-command help")
    parser_slack = subparsers.add_parser("slack", help="msgiver for Slack")
    parser_slack.add_argument("-i", "--icon", help="Slack api icon url")
    parser_slack.add_argument("-c", "--channel", help="Slack post channel")
    parser_slack.add_argument("-s", "--syntax", help="Syntax highlight message", action="store_true")
    parser_slack.add_argument("message", type=str, help="Slack post message")
    parser_slack.set_defaults(func=post_slack)

    parser_gitter = subparsers.add_parser("gitter", help="msgiver for Gitter")
    parser_gitter.add_argument("message", type=str, help="Gitter post message")
    parser_gitter.set_defaults(func=post_gitter)

    parser_setting = subparsers.add_parser("setting", help="msgiver setting")
    parser_setting.set_defaults(func=setting)

    args = parser.parse_args()

    if not args:
        parser.error("Requires keyword")
        parser.print_help()
        exit(STATUS["failed_parse"])

    return [parser, args]

def main():
    parser, args = arg_parse()
    args.func(args)
    exit(STATUS["success"])


if __name__ == "__main__":
    main()
