#!/usr/bin/python3
# _*_ coding: utf-8 _*_

# Script de python encargado de decidir si migasfree-launcher debe lanzarse al inicio de sesión
# Para ello consulta la variable FRECUENCY y cuando se produjo la última actualización

import datetime
import configparser
import os.path
import sys

# URLs de ayuda:
# https://docs.python.org/3/library/configparser.html
# https://www.pythonprogramming.in/find-the-previous-and-coming-monday-s-date-based-on-current-date.html
# https://linuxize.com/post/python-check-if-file-exists/

# Formatos de fechas:
# today = datetime.date.today()
# today = datetime.datetime.today()
# last_monday = today - datetime.timedelta(days=today.weekday())
# last_thursday = today - datetime.timedelta(days=today.weekday() - 3)
# coming_monday = today + datetime.timedelta(days=-today.weekday(), weeks=1)
# mydatetime = datetime.datetime.strptime(
#             str(datetime.date.today() - datetime.timedelta(days=today.weekday())) + " 06:00:0.0",
#             '%Y-%m-%d %H:%M:%S.%f')
today = datetime.datetime.today()
last_monday = today.date() - datetime.timedelta(days=today.date().weekday())


def vx_guardar_conf(ruta, config):
    with open(ruta, "w") as configfile:
        config.write(configfile)


# Configuramos configparser para manipular el fichero INI:
# allow_no_value=True => Nos permite añadir líneas que no tengan obligatoriamente clave = valor. Por ejemplo, comentarios
# delimiters='=' => Especificamos como delimitador entre clave y valor el =
# comment_prefixes='/' => Indicamos que usaremos como prefijo para comentarios tanto el # como el ;
config = configparser.ConfigParser(
    defaults=None, allow_no_value=True, delimiters="=", comment_prefixes="/"
)
# config = configparser.RawConfigParser(allow_no_value=True,delimiters=('=', ':'), comment_prefixes=('#', ';'))
# Indicamos a continuación que nos respete las mayúsculas en clave o valor con optionxform = str:
config.optionxform = str

# Indicamos la ruta del archivo INI:
ruta = "/etc/default/vx-dga-variables/vx-dga-x-migasfree-launcher-cron.conf"
if not os.path.isfile(ruta):
    print("=> No existe el fichero de configuración:", ruta)
    sys.exit(1)
print("=> Usamos el fichero INI:", ruta)
config.read(ruta)

# Rescatamos los valores de las variables del archivo INI para tomar decisiones:
# lastact => Fecha y hora de la última actualización que hubo contra Migasfree
# manual => Le indicamos si hay una fecha y hora personalizadas para la actualización
# frecuencia => Frecuencia de las actualizaciones: 0:daily_every_sessions|7:daily|1:weekly
lastact_str = config["Configuration"]["LASTACT"]
lastact = datetime.datetime.strptime(lastact_str, "%Y-%m-%d %H:%M:%S.%f")
manual = config["Configuration"]["MANUAL"]
frecuencia = config["Configuration"]["FRECUENCY"]
texto_frecuencia = (
    "=> La frecuencia de las actualizaciones contra Migasfree es: " + frecuencia
)

print("# La última actualización contra Migasfree fue:", str(lastact))

if manual == "1":
    texto = "# Esta configurada la actualización manualmente: " + manual
else:
    texto = "# No esta configurada la actualización manualmente: " + manual

mydatetime_str = config["Configuration"]["MYDATETIME"]
mydatetime = datetime.datetime.strptime(eval(mydatetime_str), "%Y-%m-%d %H:%M:%S.%f")

# texto += "\n\t\t=> Momento para establecer la próxima actualización [F:1-7]: > "
# texto += str(mydatetime) + "\n\t\t=> Última Actualización: " + lastact_str

actualizar = 0
if frecuencia == "0":
    texto_frecuencia += "\n# Actualizamos contra Migasfree todos los días en todos sus inicios de sesión."
    actualizar = 1
elif frecuencia == "7":
    texto_frecuencia += "\n# Actualización una vez todos los días: "
    if manual == "0" and mydatetime.date() > lastact.date():
        texto_frecuencia += (
            "Primer inición de sesión => "
            + str(mydatetime.date())
            + " > "
            + str(lastact.date())
        )
        actualizar = 1
    elif manual == "1" and (mydatetime.date() > lastact.date() and today > mydatetime):
        texto_frecuencia += (
            "A partir de "
            + str(mydatetime)
            + "=> "
            + str(mydatetime.date())
            + " > "
            + str(lastact.date())
            + " or "
            + str(today)
            + " > "
            + str(mydatetime)
        )
        actualizar = 1
    else:
        texto_frecuencia += "El equipo se actualizó en su primer arranque diario. No volverá a actulizarse en este inicio de sesión."
        # texto_frecuencia += "No corresponde con este inicio de sesión.\n# Próxima actualización: " +\
        #     str(mydatetime.date()) + " <= " + str(lastact.date()) +\
        #     " or " + str(today) + " <= " + str(mydatetime)
elif frecuencia == "1":
    if manual == "0" and mydatetime.date() > lastact.date():
        texto_frecuencia += "\n\t# Actualizamos contra Migasfree un día a la semana."
        actualizar = 1
    elif manual == "1" and (mydatetime.date() > lastact.date() and today > mydatetime):
        texto_frecuencia += (
            "\n\t# Actualizamos contra Migasfree un día a la semana: " + str(mydatetime)
        )
        actualizar = 1
    else:
        texto_frecuencia += (
            "\n\t# No corresponde con este inicio de sesión.\n\t\t"
            + str(mydatetime.date())
            + " <= "
            + str(lastact.date())
            + " or "
            + str(today)
            + " <= "
            + str(mydatetime)
        )

print(texto)
print(texto_frecuencia)

if actualizar == 1:
    nextact = str(datetime.datetime.today())
    config["Configuration"]["MIGASFREE"] = "1"
    config["Configuration"]["LASTACT"] = nextact
    # Guardamos en el archivo INI los valores actualizados resultantes:
    print("# ¡¡Ok!! Configurada la actualización contra Migasfree:", nextact)
    print("--------------------------------")
    vx_guardar_conf(ruta, config)
# else:
#     print("\t#", str(today),
#           ": No toca actualizarse contra Migasfree en este inicio de sesión.")
#     print("\t# La última actualización fue:", str(lastact))

sys.exit(0)
