#IMPORTS
import os
import gi
import signal
import json
import webbrowser
import sys
import subprocess
import re
import time
import configparser
import gettext, locale

from multiprocessing import Event, Process
from threading import Thread
from os.path import expanduser

gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, GLib, GdkPixbuf
gi.require_version('AppIndicator3', '0.1')
from gi.repository import AppIndicator3 as appindicator
gi.require_version('Notify', '0.7')
from gi.repository import Notify as notify

#Declaraciones de variables
bEncendido = False
bApagado = False
bStandby = False
########################DECLARACION NOTIFICACIONES#####################
notify.init("test notifier")
encendidoNot = notify.Notification.new("Slimbook","Has encendido el ahorro energetico","/usr/share/slimbookbattery/images/battery.png")
yaEncendidoNot = notify.Notification.new("!Atencion¡","Ya se esta usando el modo ahorro energetico","/usr/share/slimbookbattery/images/battery.png")
apagadoNot = notify.Notification.new("Slimbook","Has apagado el ahorro energetico","/usr/share/slimbookbattery/images/battery_critical.png")
yaApagadoNot = notify.Notification.new("!Atencion¡","Ya esta apagado el modo ahorro energetico","/usr/share/slimbookbattery/images/battery_critical.png")
#######################################################################

class Ventanaindicator():
    def __init__(self):
        #ponemos el path de una imagen a la variable "iconpath" 
        iconpath = "/usr/share/slimbookbattery/images/disabled_normal.png"
        #Asignamos el appindicator a una variable
        APPINDICATOR_ID = 'myappindicator'
        self.testindicator = appindicator.Indicator.new(APPINDICATOR_ID,
                                                        iconpath,
                                                        appindicator.IndicatorCategory.OTHER)
        self.testindicator.set_status(appindicator.IndicatorStatus.ACTIVE)
        self.testindicator.set_menu(self.create_menu())

    def create_menu(self):
        menu = Gtk.Menu()
        #Creando imagenes indicadores######################################################
        #encendido
        pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale(
			filename='/usr/share/slimbookbattery/images/battery.png',
			width=25,
			height=25,
			preserve_aspect_ratio=True)
        icon_encendido = Gtk.Image.new_from_pixbuf(pixbuf)
        icon_encendido.set_pixel_size(24)
        #Apagado
        pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale(
			filename='/usr/share/slimbookbattery/images/battery_critical.png',
			width=25,
			height=25,
			preserve_aspect_ratio=True)
        icon_apagado = Gtk.Image.new_from_pixbuf(pixbuf)
        icon_apagado.set_pixel_size(24)
        #Posibles iconos futuros indicadores       
        #Modo avanzado
        #pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale(
		#	filename='/usr/share/slimbookbattery/images/pref.svg',
		#	width=25,
		#	height=25,
		#	preserve_aspect_ratio=True)
        #icon_av = Gtk.Image.new_from_pixbuf(pixbuf)
        #icon_av.set_pixel_size(24)
        ##Quit
        #pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale(
		#	filename='/usr/share/slimbookbattery/images/exit.png',
		#	width=25,
		#	height=25,
		#	preserve_aspect_ratio=True)
        #icon_quit = Gtk.Image.new_from_pixbuf(pixbuf)
        #icon_quit.set_pixel_size(24)
        #Creación de los separadores##########################################################
        item_separador1 = Gtk.SeparatorMenuItem()
        item_separador2 = Gtk.SeparatorMenuItem()
        #Encendido item##########################################################
        item_ico = Gtk.ImageMenuItem()
        item_ico.set_label(('Encendido'))
        item_ico.connect('activate',self.on)
        item_ico.set_image(icon_encendido)
        item_ico.set_always_show_image(True)        
        #Apagado item##########################################################
        item_ico2 = Gtk.ImageMenuItem()
        item_ico2.set_label(('Apagado'))
        item_ico2.connect('activate',self.off)
        item_ico2.set_image(icon_apagado)
        item_ico2.set_always_show_image(True)
        #Modo avanzado item##########################################################
        item_av = Gtk.ImageMenuItem()
        item_av.set_label(('Modo avanzado'))
        item_av.connect('activate',self.pref)
        item_av.set_always_show_image(True)
        #quit item##########################################################
        item_quit = Gtk.ImageMenuItem()
        item_quit.set_label(('Exit'))
        item_quit.connect('activate',self.quit)
        item_quit.set_always_show_image(True)
        #Mostrar items##########################################################
        #Se añaden los items al menú en orden
        menu.append(item_ico)
        menu.append(item_ico2)
        menu.append(item_separador1)
        menu.append(item_av)
        menu.append(item_separador2)
        menu.append(item_quit)
        menu.show_all()
        return menu

    def quit(self,source):
        print("Estoy en destruir")
        Gtk.main_quit
        sys.exit()

    def on(self, source):
        global bEncendido
        global bApagado
        global bStandby
        if bEncendido != True:
            encendidoNot.set_urgency(1)
            encendidoNot.show()
            self.testindicator.set_icon("/usr/share/slimbookbattery/images/battery.png")
            bEncendido = True
            bApagado = False
            bStandby = False
            subprocess.call('service auto-cpufreq start', shell=True)
        else:
            yaEncendidoNot.set_urgency(1)
            yaEncendidoNot.show()
        
    def off(self, source):
        global bEncendido
        global bApagado
        global bStandby
        if bApagado != True:
            apagadoNot.set_urgency(1)
            apagadoNot.show()
            self.testindicator.set_icon("/usr/share/slimbookbattery/images//battery_critical.png")
            bApagado = True
            bEncendido = False
            bStandby = False
            subprocess.call('service auto-cpufreq stop', shell=True)
        else:
            yaApagadoNot.set_urgency(1)
            yaApagadoNot.show()        
    
    def pref(self, source):
        subprocess.call(["python3", '/usr/share/slimbookbattery/preferences.pyc'])

Ventanaindicator()
signal.signal(signal.SIGINT, signal.SIG_DFL)
Gtk.main()