#!/usr/bin/python2
# -*- coding: utf-8 -*-
import sys,  os,  commands,  glob,  time
import getopt,  re,  MySQLdb
import logging
import mv_common , mv_network
import inspect
#____________________________________________setup the logging______________________________________________________
LOG_FILENAME = '/tmp/systemconfig.log'
DEBUGLOG = '/tmp/systemconfig_debug.log'
logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
                    datefmt='%m-%d %H:%M',
                    filename=DEBUGLOG,
                    filemode='w')
# define a Handler which writes INFO messages or higher to the sys.stderr
console = logging.StreamHandler()
console.setLevel(logging.INFO)
# set a format which is simpler for console use
#formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
formatter = logging.Formatter("%(message)s")
# tell the handler to use this format
console.setFormatter(formatter)
# add the handler to the root logger
logging.getLogger('').addHandler(console)

#infoformatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
infoformatter = logging.Formatter("%(message)s")
infofile = logging.FileHandler(LOG_FILENAME, 'w')
infofile.setFormatter(infoformatter)
infofile.setLevel(logging.INFO)
logging.getLogger('').addHandler(infofile)


def usage():
    logging.info("tell people how to use this")

def setup_x(systemconfig):
    if  mv_common.read_config(mv_common.module_config,"xorg")  == False  :
        logging.info("____Skipping of Xorg, config disabled____")
    else:
	if not os.path.exists('/usr/share/icons/default'):
		if os.path.exists('/usr/share/icons/whiteglass'):
 	            os.symlink('/usr/share/icons/whiteglass','/usr/share/icons/default');
        if systemconfig.get("UseXLargeMouse") == "1" :
            cmd = "echo Xcursor.size: 48 > %s/.Xdefaults" %data_config.MYTHHOME
        else:
            cmd = "echo Xcursor.size: 16 > %s/.Xdefaults" %data_config.MYTHHOME
        mv_common.runcmd(cmd)

        cmd = "%s/bin/xconfig.sh" %systemconfig.get("MVROOT")
        mv_common.runcmd(cmd)

def main(argv):
    try:
        MVROOT = os.environ["MV_ROOT"]
    except:
        logging.debug("MVROOT was not defined, using the default value")
        MVROOT = "/usr/MythVantage"

    global cmdmodule
    global systemconfig
    systemconfig["MVROOT"]=MVROOT
    restartlcd = False
    cmdmodule={"misc":False , "sleep":False , "hostype":False , "hostypec":False , "advanced":False , "audio":False , "network":False , "advancedX":False , "webuser":False , "restartfe":False , "reloadfe":False , "ddns":False , "screensaver":False , "ir":False , "this_is_install":False , "user":False, "software":False, "plugins":False, "smolt":False, "all":False, "dhcp_request":False , "func":False, "supplemental":False}
    try:
        opts,  args = getopt.getopt(argv,  'c:hm:d:',  ["help","modules" ] )
    except getopt.GetoptError, why:
        print why
        usage()
        print "exception happened"
        sys.exit(2)
    for opt,  arg in opts:
        if opt in ("-h",  "--help"):
            usage()
            sys.exit(0)
        elif opt in ("-m"):
            for i in arg.split(","):
                cmdmodule[i]=True
        elif opt in ("-d"):
            dhcp_dev = arg


    if cmdmodule["this_is_install"] or cmdmodule["hostypec"]:
        systemconfig["hostypec"] = True
        #cmdmodule["smolt"] = True

    systemconfig["mythip"] = mv_network.setup_MYTH_IP(systemconfig)
    systemconfig["mythdhcp"] = mv_network.setup_MYTH_DHCP(systemconfig)
    systemconfig["mythgw"] = mv_network.setup_MYTH_DHCP(systemconfig)
    systemconfig["mythdns"] = mv_network.setup_MYTH_DHCP(systemconfig)

    if cmdmodule["all"]:
        logging.info("***    WILL RUN ALL MODULES   ***")
        cmdmodule["network"] = True
        cmdmodule["hostype"] = True
        cmdmodule["ir"]= True
        #cmdmodule["network"] = True
        cmdmodule["audio"] = True
        cmdmodule["misc"] = True
        cmdmodule["sleep"] = True
        cmdmodule["webuser"] = True
        cmdmodule["ddns"] = True
        cmdmodule["screensaver"] = True
        cmdmodule["advanced"] = True
        cmdmodule["software"] = True
        cmdmodule["advancedX"] = True
        cmdmodule["smolt"] = True
        cmdmodule["user"] = True

    if cmdmodule["network"]:
        restartfe = mv_network.setup_network(systemconfig, cmdmodule["this_is_install"])
        if restartfe == True :
            logging.debug("    Setting the frontend to restart due to network change")
            cmdmodule["restartfe"] = True

    if cmdmodule["func"]:
        from mv_hostype import setup_func_minion
        setup_func_minion(systemconfig.get("dbhost"),systemconfig.get("hostname"))




    if cmdmodule["hostype"]:
        import mv_hostype
        cmdmodule["advancedX"] = True
        setup_x(systemconfig)
        cmdmodule["ir"] = True
        mv_hostype.hostypeprint(systemconfig)
        cmdmodule["smolt"] = True

    if cmdmodule["network"]:
        restartfe = mv_network.setup_network(systemconfig, cmdmodule["this_is_install"])
        if restartfe == True :
            logging.debug("    Setting the frontend to restart due to network change")
            cmdmodule["restartfe"] = True



    if cmdmodule["ir"] == True:
        import mv_ir
        restart = mv_ir.setup_ir(systemconfig,data_config)
        restartfe = restart[0]
        restartlcd = restart[1]
        if restartfe == True :
            logging.debug("    Setting the frontend to restart due to lirc change")
            cmdmodule["restartfe"] = True
        cmdmodule["smolt"] = True


    if cmdmodule["audio"] == True:
        if  mv_common.read_config(mv_common.module_config,"audio")  == False  :
            logging.info("____Skipping of Audio, config disabled____")
        else:
            logging.debug("______Start of Audio Configuration______")
            if not systemconfig.get("Audiotype") == "tinker":
                if cmdmodule["this_is_install"]:
                    if systemconfig.get("Audiotype") == "OSS":
                        mv_common.pacinstall("oss")
                        mv_common.add_service("oss")

                cmd="%s/bin/soundconfig.sh -t real -i %s -d %s" %(MVROOT,
                                                systemconfig.get("Audiotype"),
                                                systemconfig["SoundDevice"])
                mv_common.runcmd(cmd)

                mv_common.reloadfe(systemconfig.get("dbhost"),restartlcd)
            else:
                logging.debug("    Tinker mode(audio), not changing configuration")
            logging.debug("__End of audio")

    if cmdmodule["misc"]:
        if  mv_common.read_config(mv_common.module_config,"misc")  == False  :
            logging.info("____Skipping of misc, config disabled____")
        else:
            import mv_misc
	    #zipcode is no longer used
            #mv_misc.setup_zip(MVROOT,systemconfig.get("zipcode"))
            mv_misc.setup_tz(systemconfig.get("timezone"),systemconfig["TEMPLATES"])
            mv_misc.setup_nfs(systemconfig)

    if cmdmodule["sleep"]:
        if  mv_common.read_config(mv_common.module_config,"sleep")  == False  :
            logging.info("____Skipping of sleep, config disabled____")
        else:
            import mv_misc
            mv_misc.setup_sleep(systemconfig)

    if cmdmodule["webuser"]:
        import mv_webuser
        mv_webuser.setup_web_auth(systemconfig.get("UseMythWEB_auth"))

    if cmdmodule["ddns"]:
        import mv_ddns
        mv_ddns.setup_ddns(systemconfig)

    if cmdmodule["screensaver"]:
        import mv_screensaver
        mv_screensaver.setup_screensaver(systemconfig, data_config)

    if cmdmodule["advanced"]:
        import mv_advanced
        mv_advanced.setup_advanced(systemconfig, data_config)

    if cmdmodule["software"] or cmdmodule["plugins"]:
        import mv_software
        mv_software.setup_software(systemconfig, data_config)

    if cmdmodule["advancedX"]:
        if  mv_common.read_config(mv_common.module_config,"xorg")  == False  :
            logging.info("____Skipping of advancedX, config disabled____")
        else:
            setup_x(systemconfig)

    if cmdmodule["restartfe"]:
        mv_common.restartfe(restartlcd)

    if cmdmodule["reloadfe"]:
        mv_common.reloadfe(systemconfig.get("dbhost"),restartlcd)

    if cmdmodule["smolt"]:
        import mv_smolt
        mv_smolt.setup_smolt_type(systemconfig.get("SystemType"),
                                  systemconfig.get("Remotetype"),
                                  systemconfig.get("RunFrontend"),
                                  data_config.MYTHHOME,
                                  data_config.SYSTEMTYPE)

    if cmdmodule["user"]:
        logging.info("____Start of ssh user____")
        if systemconfig.get("rootSSH") == "1" :
            logging.info("    Allowing ssh access for root")
            cmd = '''sed -i "s/^.*PermitRootLogin.*$/PermitRootLogin yes/" /etc/ssh/sshd_config'''
            mv_common.runcmd(cmd)
        else:
            logging.info("    Removing ssh access for root")
            cmd = '''sed -i "s/^.*PermitRootLogin.*$/PermitRootLogin no/" /etc/ssh/sshd_config'''
            mv_common.runcmd(cmd)
        logging.info("__End of ssh user\n")

    if cmdmodule["dhcp_request"]:
        cmd = '''dhcpcd -t4 -h' ' -Td %s > /tmp/mvnetwork.dhcpinfo ''' %dhcp_dev
        mv_common.runcmd(cmd)

    if cmdmodule["supplemental"] or cmdmodule["this_is_install"]:
        import mv_supplemental
        mv_supplemental.windowmanager(systemconfig)
        mv_supplemental.supplemental(systemconfig)



if __name__ == "__main__":

    config_file = "mv_config"
    data_config = __import__(config_file,  globals(),  locals(),  [])
    #Read in systemconfig
    global systemconfig
    systemconfig = {"hostypec":False}
    file_name = "/etc/systemconfig"
    try:
        config_file = open(file_name)
    except:
        logging.critical("%s could not be opened", file_name)
        sys.exit(1)

    for line in config_file:
        line = line.strip()
        if line and line[0] is not "#" and line[-1] is not "=":
            var, val = line.rsplit("=", 1)
            val = val.strip('"')
            systemconfig[var.strip()] = val.strip()
    try:
        systemconfig["TEMPLATES"] = os.environ["TEMPLATES"]
    except:
        logging.critical("    *TEMPLATES is not defined")
        logging.critical("    *using default value")
        systemconfig["TEMPLATES"] = "/usr/MythVantage/templates"

    logging.debug("______START OF DEBUG______")
    main(sys.argv[1:])
    logging.debug("______cmd line options______")
    for i in cmdmodule.items():
        logging.debug (i)
    logging.debug("______systemconfig______")
    for i in systemconfig.items():
        logging.debug(i)
    #pass