import logging

from twisted.internet import defer

import pool


log = logging.getLogger(__name__)


class Tracker(object):
    def __init__(self, session, names):
        self.session = session
        self.names = names
        self.stats = {}

    @property
    def wallet(self):
        return self.session.wallet

    @defer.inlineCallbacks
    def processNameClaims(self):
        try:
            log.info('Starting to get name claims')
            yield self._getSdHashes()
            self._filterNames('sd_hash')
            log.info('Downloading all of the blobs')
            yield self._downloadAllBlobs()
        except Exception:
            log.exception('Something bad happened')

    def _getSdHashes(self):
        return pool.DeferredPool((n.setSdHash(self.wallet) for n in self.names), 10)

    def _filterNames(self, attr):
        self.names = [n for n in self.names if getattr(n, attr)]
        self.stats[attr] = len(self.names)
        print("We have {} names with attribute {}".format(len(self.names), attr))

    def _downloadAllBlobs(self):
        return pool.DeferredPool((n.download_sd_blob(self.session) for n in self.names), 10)