#!/usr/bin/env python
# -*- coding: utf-8 -*-

from pyload.Api import Api, RequirePerm, Permission, Interaction

from ApiComponent import ApiComponent

class UserInteractionApi(ApiComponent):
    """ Everything needed for user interaction """

    @RequirePerm(Permission.Interaction)
    def isInteractionWaiting(self, mode):
        """ Check if task is waiting.

        :param mode: binary or'ed output type
        :return: boolean
        """
        return self.core.interactionManager.isTaskWaiting(self.primaryUID, mode)

    @RequirePerm(Permission.Interaction)
    def getInteractionTasks(self, mode):
        """Retrieve task for specific mode.

        :param mode: binary or'ed interaction types which should be retrieved
        :rtype list of :class:`InteractionTask`
        """
        tasks = self.core.interactionManager.getTasks(self.primaryUID, mode)
        # retrieved tasks count as seen
        for t in tasks:
            t.seen = True
            if t.type == Interaction.Notification:
                t.setWaiting(self.core.interactionManager.CLIENT_THRESHOLD)

        return tasks

    @RequirePerm(Permission.Interaction)
    def setInteractionResult(self, iid, result):
        """Set Result for a interaction task. It will be immediately removed from task queue afterwards

        :param iid: interaction id
        :param result: result as json string
        """
        task = self.core.interactionManager.getTaskByID(iid)
        if task and self.primaryUID == task.owner:
            task.setResult(result)

    @RequirePerm(Permission.Interaction)
    def getAddonHandler(self):
        pass

    @RequirePerm(Permission.Interaction)
    def callAddonHandler(self, plugin, func, pid_or_fid):
        pass

    @RequirePerm(Permission.Download)
    def generateDownloadLink(self, fid, timeout):
        pass


if Api.extend(UserInteractionApi):
    del UserInteractionApi