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

from pyload.Api import Api, RequirePerm, Permission

from ApiComponent import ApiComponent


class AccountApi(ApiComponent):
    """ All methods to control accounts """

    @RequirePerm(Permission.Accounts)
    def getAccounts(self, refresh):
        """Get information about all entered accounts.

        :param refresh: reload account info
        :return: list of `AccountInfo`
        """
        accs = self.core.accountManager.getAllAccounts(refresh)
        accounts = []
        for plugin in accs.itervalues():
            accounts.extend([acc.toInfoData() for acc in plugin.values()])

        return accounts

    @RequirePerm(Permission.All)
    def getAccountTypes(self):
        """All available account types.

        :return: string list
        """
        return self.core.pluginManager.getPlugins("accounts").keys()

    @RequirePerm(Permission.Accounts)
    def updateAccount(self, plugin, login, password):
        """Changes pw/options for specific account."""
        # TODO: options
        self.core.accountManager.updateAccount(plugin, login, password, {})

    def updateAccountInfo(self, account):
        """ Update account from :class:`AccountInfo` """
        #TODO

    @RequirePerm(Permission.Accounts)
    def removeAccount(self, account):
        """Remove account from pyload.

        :param account: :class:`ÀccountInfo` instance
        """
        self.core.accountManager.removeAccount(account.plugin, account.loginname)


if Api.extend(AccountApi):
    del AccountApi