#!/usr/bin/python3
"""
@file
@ingroup dcfGui
@copyright ESO - European Southern Observatory
@author Diego del Valle <ddelvall@eso.org>

@brief dcfGui `main` source file

The dcfGui is a dummy program whose only purpose is to show a reference implementation of
the ESO ELT ICS style and guidelines.
"""
import sys
import click

import taurus
from taurus.core.util import argparse
from taurus.core.util.log import Logger
from taurus.qt.qtgui.application import TaurusApplication
from taurus.external.qt.QtWidgets import QApplication

from ifw.wdglib.log.wdglib_logger import WdglibLogger
from dcf.gui.dcfEngGui.dcfengguimainwindow import DcfEngGuiMainWindow

import ifw.core.stooUtils.consul as consul_utils


@click.command('dcfEngGui')
@click.option('-n', '--name', default=None, help='Registered name in Consul, e.g. ngc-req')
@click.option('-u', '--uri', default=None, help='Service URI, e.g. zpb.rr"//127.0.0.1:12081')
# @click.option('-p', '--db-prefix', default=None, help='DB Path of a DCF Dcs Instance')
@click.option('-l', '--log-level', default='ERROR', help='Debugging Level',
               type=click.Choice(["TRACE", "CRITICAL", "ERROR", "WARNING", "INFO", "DEBUG"], 
                                 case_sensitive=False))
@click.pass_context
def main(ctx, name, uri, log_level):
    """
    @brief Entry point of main

    @ingroup dcfGui
    """

    app = TaurusApplication(
        app_name="dcfEngGui",
        app_version="0.2.0",
        org_name="ESO",
        org_domain="eso.org",
        cmd_line_parser=None,
    )

    WdglibLogger.init("config/dcf/gui/dcfEngGui/dcfEngGui_logging.json")

    logger = Logger(app.applicationName())
    logger.setLogLevel(getattr(taurus, log_level.title()))

    logger.info(f"Application LogLevel=|{log_level}|")

    if name is None and uri is None:
        logger.error(
            "DCF Engineering GUI needs a consul request service reference (command line option --name) or a Req/Rep URI endpoint (command line option --uri) to start"
        )
        print(
            "ERROR: DCF Engineering GUI needs a consul request service reference (command line option --name) or a Req/Rep URI endpoint (command line option --uri) to start"
        )
        sys.exit()

    window = DcfEngGuiMainWindow(ctx, get_uri(ctx))
    window.setWindowTitle('DCF Engineering GUI')
    window.show()
    sys.exit(app.exec_())


def get_uri(cmd_line_ctx):
    name = cmd_line_ctx.params.get("name")
    uri = cmd_line_ctx.params.get("uri")
    if (uri == None):
        cons = consul_utils.ConsulClient()
        uri = cons.get_uri(name)
    else:
        """ removes any quotes an user may add """
        uri = uri.strip(' " " ')
        uri = uri.strip(' \' \' ')
        """ remove / from the uri because it creates problem with MAL """
        if uri.endswith('/'):
            uri = uri[:-1]
    return uri


if __name__ == "__main__":
    main()
