#!/usr/bin/env python
# -*- coding: utf-8 -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8

import sys

from ulib.all import *
from ulib.tasks import *
from uapps.tasks import *

def display_help():
    uprint(u"""%(scriptname)s: gestion de tâches

USAGE
    %(scriptname)s [options] cmd [args]

OPTIONS
    -h, --help
    -c, --config
        Spécifier le fichier de configuration (par défaut ~/.utools/tasksrc)
    -S, --stores
        Spécifier la liste des sources pour les tâches (une par ligne). La
        commande add utilise la première source de cette liste. Toutes les
        autres commandes agissent sur l'ensemble des sources.
    -s, --tasksfile
        Spécifier une source unique pour toutes les opérations.
    --tasksdir
    --projdirs
    --purgedfile
        Autres options qui peuvent être modifiées dans le fichier de
        configuration.
COMMANDS
    add [-d] [-e] title [+projects...] [@contexts...]
        Créer une tâche.
        -d  marquer la nouvelle tâche comme faite.
        -e  éditer la nouvelle tâche.
    list [-aqdln] [filter...]
        Lister les titres des tâches correspondant au filtre.
        -a  Afficher TOUTES les tâches (par défaut si un filtre est fourni)
        -q  Afficher les tâches qui sont affichable (par défaut)
        -d  Afficher uniquement les tâches qui peuvent être effectuées
        -l  Afficher aussi les détails sur les tâches.
        -n  Ne pas afficher les statistiques.
    edit tid
        Editer la tâche #tid.
    do tid [tids...]
        Marquer la(es) tâche(s) #tid(s) comme faite(s).
    nodo tid [tids...]
        Marquer la(es) tâche(s) planifiées #tid(s) comme NON faite(s).
        La prochaine échéance de la tâche est calculée.
    start [-x] tid [summary]
        Démarrer une tâche: la marquer comme étant en cours, en ajoutant
        éventuellement une description de ce qui doit être fait.
        -x  Arrêter toutes les tâches en cours avant de démarrer la tâche
            sélectionnée.
    stop tid [summary]
        Arrêter une tâche, en ajoutant éventuellement une description de ce qui
        a été fait.
    stop -a
        Arrêter TOUTES les tâches en cours, plutôt que simplement celle
        sélectionnée.
    toggle [-x] tid [summary]
        Démarrer/arrêter une tâche.
        -x  S'il faut démarrer la tache, arrêter d'abord toutes les autres
        tâches. Sinon, ignorer cette option.
    remove tid [tids...]
        Supprimer la(es) tâche(s) #tid(s).
    purge
        Archiver les tâches faites. Elles ne seront plus affichées.
    report
        Faire un état de l'état d'avancement des tâches par projet.""" % globals())

def run_tasks():
    options, longoptions = build_options([
        ('h', 'help', u"Afficher l'aide"),
        ])
    ctl = TasksCtl()
    options, args = ctl.get_args(None, options, longoptions)
    for option, value in options:
        if option in ('-h', '--help'):
            display_help()
            sys.exit(0)
        elif ctl.is_option(option, value):
            pass

    itf, cmd_name, args = get_tasks_itf(args, ctl)
    if itf is None:
        display_help()
        sys.exit(1)

    try:
        exit(itf.run(args, cmd_name=cmd_name))
    except Exit: raise
    except: die()

if __name__ == '__main__':
    run_tasks()
