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

import sys
from optparse import OptionParser, OptionGroup
from pyeole.schedule import display_schedules, ManageSchedule, \
                            apply_schedules, add_schedule, del_schedule
from pyeole.ansiprint import print_orange
from pyeole.ihm import only_root

only_root()

def main():
    parser = OptionParser()
    parser.add_option("-l", "--list", dest="list", action="store_true",
                      default=False, help=u"Liste les scripts activés et désactivés")
    parser.add_option("--apply", dest="apply", help=u"Active/désactive les scripts dans le schedule",
                      action='store_true', default=False)
    group = OptionGroup(parser, u"Activer un script (ne pas oublier d'appliquer la configuration)")
    group.add_option("-a", "--add", dest="add", metavar="PERIODICITY", help=u"Périodicité : une fois (once), tous les jours (daily), toutes les semaines (weekly) ou tous les mois (monthly)")
    group.add_option("-s", "--script", dest="script", metavar="SCRIPT NAME", help=u"Nom du script")
    parser.add_option_group(group)
    parser.add_option("-d", "--del", dest="delete", metavar="SCRIPT NAME|once", help=u"Désactive le script en précisant son nom ou 'once' et le nom du script avec l’option -s (ne pas oublier d'appliquer la configuration)")
    (option, args) = parser.parse_args()

    if option.delete is None and option.add is None and option.list is False and option.apply is False:
        parser.print_help()
        sys.exit(0)

    if (option.delete is not None and option.add is not None) or \
            (option.list is True and option.add is not None) or \
            (option.delete is not None and option.list is True) or \
            (option.apply is True and option.add is not None) or \
            (option.apply is True and option.list is True) or \
            (option.apply is True and option.delete is True):
        parser.print_help()
        print("can't list, apply, add or delete together")
        print
        sys.exit(1)

    if option.add is not None and option.script is None:
        print("you should specified -s with -a")
        print
        parser.print_help()
        sys.exit(1)

    if option.delete == 'once' and option.script is None:
        print("you must specify script you want to deactivate")
        print
        parser.print_help()
        sys.exit(1)

    if option.delete != 'once' and option.script is not None and option.add is None:
        print("script name is passed to -d option if periodicity is different than once")
        print
        parser.print_help()
        sys.exit(1)

    if option.list:
        display_schedules()

    if option.add is not None:
        try:
            if option.add == 'once':
                add_schedule(option.add, None, option.script)
            else:
                sch = ManageSchedule()
                sch.add(option.script, option.add)
                sch.save()
        except Exception as err:
            print_orange(str(err))
            sys.exit(1)

    if option.delete is not None:
        try:
            if option.delete == 'once':
                del_schedule(option.delete, None, option.script)
            else:
                sch = ManageSchedule()
                sch.delete(option.delete)
                sch.save()
        except Exception as err:
            print_orange(str(err))
            sys.exit(1)

    if option.apply:
        apply_schedules()

if __name__ == '__main__':
    main()
