#!/usr/bin/env python

from dm.common.utility.loggingManager import LoggingManager
from dm.common.utility.configurationManager import ConfigurationManager

class DsRestApiFactory:

    CONFIG_SECTION_NAME = 'DsRestApiFactory'
    USERNAME_KEY = 'username'
    PASSWORD_FILE_KEY = 'passwordfile'
    HOST_KEY = 'host'
    PORT_KEY = 'port'
    PROTOCOL_KEY = 'protocol'

    __logger = None
    __username = None
    __password = None
    __host = None
    __port = None
    __protocol = None

    @classmethod
    def getLogger(cls):
        if cls.__logger is None:
            cls.__logger = LoggingManager.getInstance().getLogger(cls.__name__)
        return cls.__logger

    @classmethod
    def __getConfiguration(cls):
        if cls.__username is None:
            cls.__username = ConfigurationManager.getInstance().getConfigOption(cls.CONFIG_SECTION_NAME, cls.USERNAME_KEY)
            cls.__password = open(ConfigurationManager.getInstance().getConfigOption(cls.CONFIG_SECTION_NAME, cls.PASSWORD_FILE_KEY)).read().strip()
            cls.__host = ConfigurationManager.getInstance().getConfigOption(cls.CONFIG_SECTION_NAME, cls.HOST_KEY)
            cls.__port = ConfigurationManager.getInstance().getConfigOption(cls.CONFIG_SECTION_NAME, cls.PORT_KEY)
            cls.__protocol = ConfigurationManager.getInstance().getConfigOption(cls.CONFIG_SECTION_NAME, cls.PROTOCOL_KEY)
        return (cls.__username, cls.__password, cls.__host, cls.__port, cls.__protocol)

    @classmethod
    def getUserRestApi(cls):
        from userRestApi import UserRestApi
        (username, password, host, port, protocol) = cls.__getConfiguration()
        api = UserRestApi(username, password, host, port, protocol)
        return api

    @classmethod
    def getAuthRestApi(cls):
        from authRestApi import AuthRestApi
        (username, password, host, port, protocol) = cls.__getConfiguration()
        api = AuthRestApi(username, password, host, port, protocol)
        return api

    @classmethod
    def getExperimentRestApi(cls):
        from experimentRestApi import ExperimentRestApi
        (username, password, host, port, protocol) = cls.__getConfiguration()
        api = ExperimentRestApi(username, password, host, port, protocol)
        return api

    @classmethod
    def getFileRestApi(cls):
        from fileRestApi import FileRestApi
        (username, password, host, port, protocol) = cls.__getConfiguration()
        api = FileRestApi(username, password, host, port, protocol)
        return api
####################################################################
# Testing

if __name__ == '__main__':
    pass