#!/usr/bin/python
# -*- 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):
    cmd = "%s/bin/xconfig.sh" %systemconfig["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 }
    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["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["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:
        logging.debug("______Start of Audio Configuration______")
        if not systemconfig["Audiotype"] == "tinker":
            cmd="%s/bin/soundconfig.sh -t real -i %s -d %s" %(MVROOT,systemconfig["Audiotype"],systemconfig["SoundDevice"])
            mv_common.runcmd(cmd)
        else:
            logging.debug("    Tinker mode(audio), not changing configuration")
        logging.debug("__End of audio")

    if cmdmodule["misc"]:
        import mv_misc
        mv_misc.setup_zip(MVROOT,systemconfig["zipcode"])
        mv_misc.setup_tz(systemconfig["timezone"],systemconfig["TEMPLATES"])
        mv_misc.setup_nfs(systemconfig)

    if cmdmodule["sleep"]:
        import mv_misc
        mv_misc.setup_sleep(systemconfig)

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

    if cmdmodule["ddns"]:
        print " LOOK FOR DDNS"

    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"]:
        setup_x(systemconfig)

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

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

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

    if cmdmodule["user"]:
        logging.info("____Start of ssh user____")
        if systemconfig["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 __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