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


def mplayer_saver_check (cmd,templatefile):
    logging.debug("    Checking for heartbeat command in mplayer.conf")
    mplayerconf = "/etc/mplayer/mplayer.conf"
    if not os.path.exists(mplayerconf):
        logging.debug("    copying in mplayer template file")
        mv_common.cp_and_log(templatefile, mplayerconf)

    try:
        f = open(mplayerconf, 'r')
        mplayerconf_contents = f.readlines()
        f.close()
    except:
        logging.debug("    Couldn't open %s for reading",mplayerconf)
        mplayerconf_contents = "#\n"

    try:
        f = open(mplayerconf, 'w')
    except:
        logging.debug("    Couldn't open %s for writing",mplayerconf)
        return

    for line in mplayerconf_contents:
        if re.match("^.*stop-xscreensaver",line):
            continue
        elif re.match("^.*heartbeat-cmd",line):
            continue
        else:
            f.write(line)

    f.write("stop-xscreensaver = 0\n")
    line='''heartbeat-cmd="%s"\n''' %cmd
    f.write(line)
    f.close()


def killxscreensaver():
    logging.info("   Stopping xscreensaver")
    cmd="xscreensaver-command --exit "
    mv_common.runcmd(cmd)
    cmd="killall xscreensaver "
    mv_common.runcmd(cmd)

def killgscreensaver():
    logging.info("    Stopping gnome-screensaver")
    cmd="gnome-screensaver-command --exit "
    mv_common.runcmd(cmd)
    cmd="killall gnome-screensaver "
    mv_common.runcmd(cmd)


def setup_x_screensaver(idle,theme,screenconfigfile,templatefile):
    logging.info("    Configuring X screensaver")
    killgscreensaver()
    logging.debug("    Why can't xscreensaver have a nice configuration !")

    if not os.path.exists(screenconfigfile):
        logging.debug("   copying in new template file")
        mv_common.cp_and_log(templatefile,screenconfigfile)

    try:
        f = open(screenconfigfile, 'r')
        screenconfigcontents=f.readlines()
        f.close()
    except:
        logging.info("Couldn't open %s for reading",screenconfigfile)
        return
    try:
        f = open(screenconfigfile, 'w')
    except:
        logging.info("Couldn't open %s for writing",screenconfigfile)
        return

    startline=0
    foundline=0

    for k, line in enumerate(screenconfigcontents):
        if re.match("programs:",line):
            startline = k
        if re.search(theme,line):
            foundline = k
    themenumber=foundline-startline-2

    for line in screenconfigcontents:
        if re.match("selected.*$",line):
            continue

        if re.match("timeout",line):
            logging.info("    Setting idletime to %s",idle)
            outline = "timeout:   0:%s:00 \n" %idle
            f.write(outline)
        elif re.match("mode",line):
            if theme == "Random":
                logging.info("    Setting theme to %s", "Random")
                outline = "mode:    random \n"
                f.write(outline)
                outline = "selected:    -1 \n"
                f.write(outline)
                continue

            elif theme == "Blank":
                logging.info("    Setting theme to %s", "blank")
                outline = "mode:    blank \n"
                f.write(outline)
                outline = "selected:    -1 \n"
                f.write(outline)
                continue

            else:
                logging.info("    Setting theme to %s", theme)
                outline = "mode:    one\n"
                f.write(outline)
                logging.debug("    Theme number is %s",themenumber)
                outline = "selected:    %s\n" %themenumber
                f.write(outline)
                continue

        else:
            outline = line
            f.write(outline)
    f.close()
    logging.debug("__End of xscreensaver")

def setup_gnome_screensaver(theme,idletime):
    logging.info("    Configuring gnome screensaver")

    logging.info("    Disabling lock screen")
    cmd='''gconftool-2 --direct   --config-source xml:readwrite:/etc/gconf/gconf.xml.mandatory  --type bool   --set /apps/gnome-screensaver/lock_enabled false'''
    mv_common.runcmd(cmd)

    logging.info("    Setting idletime to %s",idletime)
    cmd='''gconftool-2 --direct  --config-source xml:readwrite:/etc/gconf/gconf.xml.mandatory  --type int -s "/apps/gnome-screensaver/idle_delay" %s''' %idletime
    mv_common.runcmd(cmd)

    logging.info("    Setting mode to single")
    cmd='''gconftool-2 --direct  --config-source xml:readwrite:/etc/gconf/gconf.xml.mandatory  --type string -s "/apps/gnome-screensaver/mode" single'''
    mv_common.runcmd(cmd)

    if theme == "Random":
        logging.info("    setting theme to random")
        cmd='''gconftool-2 --direct  --config-source xml:readwrite:/etc/gconf/gconf.xml.mandatory  --type string -s "/apps/gnome-screensaver/mode" random'''
        mv_common.runcmd(cmd)

    elif theme == "Blank":
        logging.info("    setting theme to blank")
        cmd='''gconftool-2 --direct  --config-source xml:readwrite:/etc/gconf/gconf.xml.mandatory  --type string -s "/apps/gnome-screensaver/themes" blank'''
        mv_common.runcmd(cmd)

    else:
        logging.info("    setting theme to %s",theme)
        cmd='''gconftool-2  --direct  --config-source xml:readwrite:/etc/gconf/gconf.xml.mandatory --set --type list --list-type=string /apps/gnome-screensaver/themes [screensavers-%s]''' %theme
        mv_common.runcmd(cmd)

    killxscreensaver()
    logging.info("__End gnome screensaver")




def setup_screensaver (systemconfig,data_config):
    logging.info("____Start of screensaver configuration____")
    screensavertype = systemconfig["Screensavertype"]
    theme = systemconfig["Screensavertheme"]
    idletime = systemconfig["Screensaveridle"]
    configfile = data_config.MYTHHOME+"/.xscreensaver"
    templatefile = systemconfig["TEMPLATES"]+"/xscreensaver.template"
    mtemplate = systemconfig["TEMPLATES"]+"/mplayer.conf.template"

    if screensavertype == "xscreensaver":
        mv_common.pacinstall("xscreensaver")
        mv_common.pacremove("gnome-screensaver")
        setup_x_screensaver(idletime, theme, configfile, templatefile)
        mplayer_saver_check("/usr/bin/xscreensaver-command -deactivate &",mtemplate)

    elif screensavertype == "gscreensaver":
        mv_common.pacinstall("xscreensaver")
        mv_common.pacinstall("gnome-screensaver")
        setup_gnome_screensaver(theme,idletime)
        mplayer_saver_check("/usr/bin/gnome-screensaver-command -p &",mtemplate)

    elif screensavertype == "none":
        mv_common.pacremove("xscreensaver")
        mv_common.pacremove("gnome-screensaver")
        killgscreensaver()
        killxscreensaver()

    elif screensavertype == "tinker" :
        logging.debug("    screensaver tinker mode detected")
    else:
        logging.debug("   Unknown screensaver")
    logging.info("__End of screensaver\n")