# -*- coding: utf-8 -*-
import logging, os, re
import mv_common

def setup_pacman(create_link):
    if create_link:
        logging.info("    Creating pacman link")
        #LOOK
        #This is not implmented yet, below is the bash code for reference
        #if [ ! x$1 = x ]
    #then
        #ln -s ${BASE}/data/var ${BASE}/data/srv/httpd/htdocs/repo
        #echo "creating the link for the pacman repo mirror"
    #fi

    #for i in mv-core mv-core-testing mv-extra mv-extra-testing
    #do
        #echo "[$i]"  > ${BASE}/etc/pacman.d/$i
        ##add mirror if needed
        #if [ x$PKG_MIRROR = x1 ]
        #then
            #echo " Server = http://$dbhost/repo/$i " >> ${BASE}/etc/pacman.d/$i
        #fi
        ##add user templates
        #USERTEMPLATES="/data/home/mythtv/templates"
        #if [ -f $USERTEMPLATES/sources/$i ]
        #then
            #echo "Adding user  $i"
            #cat $USERTEMPLATES/sources/$i  >> ${BASE}/etc/pacman.d/$i
        #fi
        #cat $TEMPLATES/sources/$i  >> ${BASE}/etc/pacman.d/$i
        #echo "setting local mirror to $dbhost for $i "
    #done
    else:
        logging.info("    Pacman link will not be created")
    return
def setup_ncid_client(runclient,runserver):
    logging.debug("    Configuring ncid client")
    if runclient == "1" :
        mv_common.pacinstall("ncid")
        mv_common.add_service("ncid-client")
    else:
        logging.debug("    Removing ncid client")
        mv_common.remove_service("ncid-client")
    return

def setup_ncid_daemon(Runncidd):
    logging.info("    Configuring callerid daemon")
    if Runncidd == "1":
        mv_common.pacinstall("ncid")
        mv_common.add_service("ncid-server")
        mv_common.add_service("ncid-logger")
    else:
        logging.debug("    Callerid will not run")
        mv_common.pacremove("ncid")
        mv_common.remove_service("ncid-server")
        mv_common.remove_service("ncid-logger")

    return



#def setup_ncid_client(dbhost,templatefile):
    ##This always runs
    #logging.debug("    Configuring ncid client with server %s",dbhost)
    #cmd = '''sed -e "s/^set Host.*$/set Host %s /" %s >/etc/ncid/ncid.conf''' %(dbhost, templatefile)
    #return

#def setup_ncid_daemon(port,templatefile,Runncidd):
    #logging.info("    Configuring callerid daemon")
    #if Runncidd == "1":
        #logging.debug("    Port: %s",port)
        #mv_common.cp_and_log("/etc/ncid/ncidd.conf",templatefile)
        #cmd = '''sed -e "s/.*set ttyport.*$/set ttyport =  \/dev\/%s /" %s >/etc/ncid/ncidd.conf''' %(port,templatefile)
        #mv_common.runcmd(cmd)
        #mv_common.pacinstall("ncidd")
        #mv_common.add_service("ncidd")
    #else:
        #logging.debug("    Callerid will not run")
        #mv_common.pacremove("ncidd")
        #mv_common.remove_service("ncidd")
    #return

def setup_splash(Usebootsplash):
    if Usebootsplash == "1":
        logging.info("    Enabling splash")
        cmd = ''' sed -i "s/^default.*0/default 1/g" /boot/grub/menu.lst'''
        mv_common.runcmd(cmd)
    else:
        logging.info("    Disabling splash")
        cmd = ''' sed -i "s/^default.*1/default 0/g" /boot/grub/menu.lst'''
        mv_common.runcmd(cmd)
    return
def setup_rrd(UseRRD):
    if UseRRD == "1":
        logging.info("    Enabling rrd_stats")
        mv_common.pacinstall("rrd_stats")
    else:
        logging.info("    Disabling rrd_stats")
        mv_common.pacremove("rrd_stats")


def setup_hobbit(UseHobbit,SystemType,dbhost):
    if UseHobbit == "1":
        if SystemType == "Standalone" or SystemType == "Master_backend":
            logging.info("    Installing hobbit server")
            mv_common.pacinstall("hobbitserver")
            mv_common.add_service("hobbit")
        else:
            logging.info("    Installing hobbit client")
            mv_common.pacinstall("hobbit-client")
            setup_hobbit_client(dbhost)
            mv_common.add_service("hobbit-client")

    else:
            logging.info("    Removing Hobbit")
            mv_common.pacremove("hobbit")
            mv_common.pacremove("hobbit-client")
            mv_common.remove_service("hobbit-client")
            mv_common.remove_service("hobbitserver")
            cmd = "rm -f /data/srv/httpd/htdocs/hobbit/index.html"
            mv_common.runcmd(cmd)
    return

def setup_hobbit_client(dbhost):
    logging.info("    Configuring hobbit client")
    logging.debug("   hobbit server is %s:", dbhost)
    cmd='''sed -i "s/^BBDISP.*$/BBDISP=%s/g" /data/srv/hobbit/client/etc/hobbitclient.cfg ''' %dbhost
    mv_common.runcmd(cmd)
    return

def setup_evrouter(UseEvrouter,EvrouterConfig,template):
    if UseEvrouter == "1":
        logging.info("    Configuring everouter")
        logging.debug("    EvrouterConfig is %s:",EvrouterConfig)
        if EvrouterConfig == "tinker":
            logging.debug("    tinker mode, not changing the config")
            return
        mv_common.pacinstall("evrouter")
        mv_common.pacinstall("Xvfb")
        mv_common.cp_and_log(template+"/evrouter/"+EvrouterConfig,"/etc/evrouter.cfg")
        mv_common.add_service("evrouter")
        mv_common.add_service("Xvfb")
    else:
        logging.info("    Not using evrouter")
        mv_common.pacremove("evrouter")
        mv_common.remove_service("evrouter")
        mv_common.remove_service("Xvfb")

    return

def setup_DNSmasq(RunDHCP,ip,gw,nameserver):
    if RunDHCP == "1":
        logging.info("    Configuring dhcp server(dnsmasq)")
        logging.debug("    ip: %s", ip)
        logging.debug("    gw: %s", gw)
        logging.debug("    ns: %s", nameserver)
        mv_common.pacinstall("dnsmasq")
        mv_common.pacinstall("mvpmc")
        mv_common.add_service("dnsmasq")
        logging.debug("    Setting default route to my gw: %s",gw)
        try:
            f = open("/etc/dnsmasq.conf",'r')
            dnsconf = f.readlines()
            f.close()
        except:
                logging.info("    Couldn't open dnsmasq.conf")
                return
        for line in dnsconf:
            outline = line
            if re.match("^dhcp-option=3",line):
                logging.debug("    Setting default route to my gw: %s",gw)
                outline = "dhcp-option=3,%s\n" %gw
            if re.match("^dhcp-option=6",line):
                logging.debug("    Setting dns to my ip: %s",ip)
                outline = "dhcp-option=6,%s\n" %ip
            f.write(outline)
        f.close()

        logging.debug("    change nfsroot to my ip:%s",ip)
        cmd = '''sed -i "s/nfsroot=.*:/nfsroot=%s:/g" /data/srv/tftp/pxelinux.cfg/default''' %ip
        mv_common.runcmd(cmd)

        logging.debug("    Adding 127.0.0.1 to resolv.conf")
        logging.debug("    other nameserver is %s",nameserver)
        try:
            f = open("/etc/resolv.conf",'r')
            dns = f.readlines()
            f.close()
        except:
                dns=''
                logging.debug("   Couldn't open resolv.conf for reading")
        try:
            f = open("/etc/resolv.conf",'w')
            line="search lan\n"
            f.write(line)
            line="nameserver 127.0.0.1\n"
            f.write(line)
            line="nameserver %s\n" %nameserver
            f.write(line)
            for line in dns:
                f.write(line)
            f.close()
        except:
                logging.debug("   Couldn't open resolv.conf for writing")

        logging.debug("    setup dongle.config")
        cmd = ''' sed -i "s/mvpmc -f .*/mvpmc -f \/etc\/helvR10.fon -s %s \& /" /data/srv/tftp/dongle.bin.config ''' %ip
        #COMMAND="%s/mvpmc -f .*/mvpmc -f \/etc\/helvR10.fon -s ${ip} \& /"
        #ex ${BASE}/data/srv/tftp/dongle.bin.config <<EOF
        mv_common.runcmd(cmd)
    else:
        logging.info("    removing dhcp server(dnsmasq)")
        mv_common.pacremove("dnsmasq")
        mv_common.pacremove("mvpmc")
        mv_common.remove_service("dnsmasq")
    return

def setup_mythweb(UseMythWEB):
    if UseMythWEB == "1":
        logging.info("    Activating mythweb")
        mv_common.pacinstall("lighttpd")
        mv_common.pacinstall("php-cgi")
        mv_common.pacinstall("mythweb")
        mv_common.add_service("lighttpd")
    else:
        logging.info("    Removing mythweb")
#        mv_common.pacremove("lighttpd")
        mv_common.pacremove("mythweb")
 #       mv_common.remove_service("lighttpd")
    return

def setup_samba(systemconfig,data_config):
    mythhome = data_config.MYTHHOME
    if systemconfig.get("UseSamba") == "1":
        logging.info("    Activating windows file sharing")
        usersamba=mythhome+"/templates/smb.conf"
        mv_common.pacinstall("samba")
        if not os.path.exists("/etc/samba"):
            logging.debug("    Creating directory /etc/samba")
            try:
                os.makedirs("/etc/samba")
            except:
                pass

        if os.path.exists(usersamba):
            logging.debug("    Using user provided config file %s",usersamba)
            cmd = "install -D -m755  %s /etc/samba/smb.conf" %usersamba
            mv_common.runcmd(cmd)
        else:
            Samba_media = systemconfig.get("Samba_media")
            Samba_home = systemconfig.get("Samba_home")
            if systemconfig.get("Samba_mediareadonly") == "0":
                smreadonly = "yes"
            else:
                smreadonly = "no"

            if systemconfig.get("Samba_homereadonly") == "0":
                shreadonly = "yes"
            else:
                shreadonly = "no"
            domain = systemconfig.get("Samba_domain")
            servername = systemconfig.get("hostname")

            try:
                f = open(systemconfig.get("TEMPLATES")+"/samba/smb.conf.template",'r')
                t_smbconf = f.readlines()
                f.close()
            except:
                logging.info("   Couldn't open samba template file")
                return

            try:
                f = open("/etc/samba/smb.conf",'w')
            except:
                logging.info("   Couldn't open samba file")
                return

            for line in t_smbconf:
                outline = line
                if re.match("^.*workgroup", line):
                    logging.debug("    Setting workgroup to %s",domain)
                    outline="workgroup = %s\n" %domain
                    logging.debug("     %s",outline)
                if re.match("^.* server string",line):
                    logging.debug("    Setting server name to %s",servername)
                    outline="server string = %s\n" %servername
                    logging.debug("     %s",outline)
                f.write(outline)
            outline="include =  %s/templates/user.shares \n" %mythhome
            f.write(outline)
            if Samba_media == "1":
                outline="include =  /etc/samba/smb.conf.media\n"
                f.write(outline)
            if Samba_home == "1":
                outline="include =  /etc/samba/smb.conf.home\n"
                f.write(outline)
            f.close()
            logging.info("    Writing smb.conf.media")
            try:
                f = open("/etc/samba/smb.conf.media","w")
            except:
                logging.info("    Couldn't open smb.conf.media")
                return
            medialines='''
[%s]
path = %s
public = yes
only guest = yes
writeable  = %s
printable = no
force user = mythtv
force group = mythtv
create mask = 0755''' %(data_config.SMEDIA,data_config.DATAMOUNT,smreadonly)
            f.write(medialines)
            f.close
            logging.debug("     %s",medialines)
            logging.info("    Writing smb.conf.home")
            try:
                    f = open("/etc/samba/smb.conf.home","w")
            except:
                logging.info("    Couldn't open smb.conf.home")
                return
            homelines='''
[home]
path = %s
public = yes
only guest = yes
writeable  = %s
printable = no
force user = mythtv
force group = mythtv
create mask = 0755 ''' %(data_config.MYTHHOME,shreadonly)
            f.write(homelines)
            f.close
            logging.debug("     %s",homelines)


	mv_common.add_service("nmbd")
        mv_common.add_service("smbd")
	mv_common.restart_service("nmbd")
	mv_common.restart_service("smbd")

    else:
        logging.info("  Removing windows file sharing")
        mv_common.remove_service("smbd")
        mv_common.remove_service("nmbd")
        mv_common.pacremove("samba")
        mv_common.pacinstall("smbclient")
    return

def setup_NFSshares(UseNFS,templatefile):
    if UseNFS == "1":
        logging.info("    Activating NFS server")
        mv_common.pacinstall("nfs-utils")
        mv_common.pacinstall("rpcbind")
        cmd = '''sed -e "s/REPLACEME/*/g" %s  >/etc/exports''' %templatefile
        mv_common.runcmd(cmd)
        mv_common.add_service("nfsd")
        mv_common.add_service("nfs-common")
        mv_common.add_service("rpcbind")
    else:
        logging.info("    Removing NFS server")
        mv_common.remove_service("nfsd")
    return

def setup_dyndns(DDnsEnable):
    if DDnsEnable == "1":
        logging.info("    Installing Dynamic DNS client")
        mv_common.pacinstall("inadyn")
        mv_common.add_service("inadyn")
    else:
        logging.info("    Removing Dynamic DNS client")
        mv_common.pacremove("inadyn")
        mv_common.remove_service("inadyn")


def setup_advanced(systemconfig,data_config):
    if  mv_common.read_config(mv_common.module_config,"advanced")  == False  :
        logging.info("____Skipping of Advanced, config disabled____")
        return
    logging.info("____Start of advanced configuration____")
    create_link = False
    if systemconfig.get("SystemType") == "Master_backend":
        create_link = True
    setup_pacman(create_link)



    if (( systemconfig.get("SystemType") == "Standalone" ) or (systemconfig.get("SystemType") == "Master_backend" )) :
        setup_ncid_daemon(systemconfig.get("Runncidd"))

    setup_ncid_client(systemconfig.get("ncidclient"),systemconfig.get("Runncidd"))


    setup_splash(systemconfig.get("Usebootsplash"))
    if data_config.SYSTEMTYPE == "MythVantage":
        setup_hobbit(systemconfig.get("UseHobbit"),
                    systemconfig.get("SystemType"),
                    systemconfig.get("dbhost"))
    if data_config.SYSTEMTYPE == "LinHES":
        setup_rrd(systemconfig.get("UseRRD"))

    setup_evrouter(systemconfig.get("UseEvrouter"),
                   systemconfig.get("EvrouterConfig"),
                   systemconfig.get("TEMPLATES"))

    setup_DNSmasq(systemconfig.get("RunDHCP"),
                  systemconfig.get("mythip"),
                  systemconfig.get("mythgw"),
                  systemconfig.get("mythdns"))

    setup_mythweb(systemconfig.get("UseMythWEB"))
    setup_samba(systemconfig,data_config)
    setup_NFSshares(systemconfig.get("UseNFS"),
                systemconfig.get("TEMPLATES")+"/exports.template")

    setup_dyndns(systemconfig.get("DDnsEnable"))
    logging.info("__End of advanced configuration\n")