def __init__(self, username, password, toodledo_appid):
     self.username = username
     self.password = password
     self.client = ApiClient(application_id = toodledo_appid)
     self.client.authenticate(username, password)
class ToodledoClient():
    def __init__(self, username, password, toodledo_appid):
        self.username = username
        self.password = password
        self.client = ApiClient(application_id = toodledo_appid)
        self.client.authenticate(username, password)

    def re_authenticate(self):
        self.client.authenticate(self.username, self.password)

    def get_tasks(self, message):
        task_condition = self._get_task_condition(message)
        folderID = 0
        if len(task_condition['f']) != 0:
            folder_list = self.client.getFolders()
            for folder in folder_list: 
                if folder.title == task_condition['f']:
                    folderID = folder.id

        contextID = 0 
        if len(task_condition['c']) != 0:
            context_list = self.client.getContexts()
            for context in context_list:
                if context.title == task_condition['c']:
                    contextID = context.id 

        print "contextID: %d\nfolderID: %d" % (contextID, folderID)

        if contextID != 0 and folderID != 0:
            tasks = self.client.getTasks(notcomp = 1,
                    folder = folderID,
                    context = contextID)
        elif contextID != 0 and folderID == 0:
            tasks = self.client.getTasks(notcomp = 1, context = contextID)
        elif contextID == 0 and folderID != 0:
            tasks = self.client.getTasks(notcomp = 1, folder = folderID)
        else:
            tasks = self.client.getTasks(notcomp = 1)
        ret_message = '' 
        print 'tasks types is :'
        print type(tasks)
        for k in sorted(tasks, key = lambda t:t.duedate):
            ret_message += "%s !%d %%%s\n" % (k.title, k.priority, k.duedate)
        return ret_message

    def _get_task_condition(self, cmd_string):
        task_condition = {'c':'', 'f':''} 
        task_condition_list = cmd_string.split(' ')
        for condition in task_condition_list:
            if len(condition) != 0:
                pos = condition.index('.')
                if pos == 1: 
                    task_condition[condition[0].lower()] = condition[2:]
        return task_condition 

    def get_next_actions(self):
        ret_message = ''
        today = datetime.datetime.today()
        after_day = today - datetime.timedelta(days = 1)
        before_day = today + datetime.timedelta(days = 2)
        after_time = after_day.strftime('%Y-%m-%d')
        before_time = before_day.strftime('%Y-%m-%d')
        tasks = self.client.getTasks(notcomp = 1,
                status = 1,
                after = after_time,
                before = before_time)
        print tasks
        # todo:sort tasks
        # for task in tasks:
        for task in sorted(tasks, key = lambda t:(t.duedate, -t.priority)):
            ret_message += "%s !%d %%%s\n" % (task.title,
                    task.priority,
                    task.duedate)

        return ret_message