#! /usr/bin/env python3
# -*- coding: UTF-8 -*-
##############################################
# Home	: https://www.netkiller.cn
# Author: Neo <netkiller@msn.com>
##############################################
import os
import sys
module = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# print(module)
sys.path.insert(0, module)

try:
    from optparse import OptionParser, OptionGroup
    from netkiller.nacos import Nacos
except ImportError as err:
    print("Error: %s" % (err))


class NacosApplication:
    def __init__(self) -> None:

        self.parser = OptionParser("usage: %prog [options]")
        self.parser.add_option("-s", "--server-addr", dest="nacos", help="Nacos 服务器地址",
                               default=None, metavar="http://localhost:8848")
        self.parser.add_option('-u', '--username', dest='username', default=None, metavar='',
                               help='用户名')
        self.parser.add_option('-p', '--password', dest='password', default=None, metavar='',
                               help='密码')
        self.parser.add_option('-n', '--namespace', dest='namespace', default='public', metavar='public',
                               help='命名空间')
        self.parser.add_option('-d', '--dataId', dest='dataId', default=None, metavar='',
                               help='配置ID')
        self.parser.add_option('-g', '--group', dest='group', default='DEFAULT_GROUP', metavar='DEFAULT_GROUP',
                               help='分组')
        group = OptionGroup(self.parser, "配置管理")
        group.add_option(
            '', "--push", action="store_true", dest="push", help="发布配置")
        group.add_option(
            '', "--show", action="store_true", dest="show", default=False, help="查看配置")
        group.add_option(
            '', "--save", action="store_true", dest="save", help="保存配置")
        group.add_option('-f', '--file', dest='file',
                               help='.yaml 文件', default=None, metavar='')
        group.add_option('-t', '--type', dest='type',
                               help='yaml|text|json|xml|Properties', default='yaml', metavar='yaml')
        group.add_option(
            '', "--delete", action="store_true", dest="delete", help="删除配置")
        self.parser.add_option_group(group)
        # self.parser.add_option(
        #     '', "--debug", action="store_true", dest="debug", help="debug mode")

    def usage(self):
        self.parser.print_help()
        print("\nHomepage: https://www.netkiller.cn\tAuthor: Neo <netkiller@msn.com>")
        print("Help: https://github.com/netkiller/devops/blob/master/doc/")
        exit()

    def main(self):
        (options, args) = self.parser.parse_args()

        if not options.nacos:
            self.usage()
        if not options.dataId:
            self.usage()

        nacos = Nacos(options.nacos, options.namespace)
        nacos.login(options.username, options.password)
        if options.show:
            nacos.showConfig(options.dataId, options.group)
        elif options.save:
            if not options.file:
                self.usage()
            nacos.saveConfig(options.file, options.dataId, options.group)
        elif options.push:
            if not options.file:
                self.usage()
            nacos.putConfig(options.file, options.dataId,
                            options.group, options.type)
        elif options.delete:
            nacos.deleteConfig(options.dataId, options.group)


if __name__ == '__main__':
    app = NacosApplication()
    app.main()
