import sys
from .base import BaseStore, GetStore, PutStore, CatalogStore, DeleteStore

class MemoryStore(BaseStore, GetStore,
                  PutStore, CatalogStore):
    """BasicStore is a basic datashards store with a memory backend.

    This is more of an example than anything you'd use
    """
    def __init__(self):
        """Create a new MemoryStore instance

        returns:
            A new `MemoryStore` object
        """
        self._store = {}
    
    def __repr__(self):
        return "memory://"

    def get(self, xt):
        self.__doc__ = GetStore.get.__doc__
        digest = super().validate_xt(xt)[2]
        return self._store[digest]

    def put(self, data):
        self.__doc__ = PutStore.put.__doc__
        super().validate_data(data)

        digest = super().sha256d_data(data)
        str_digest = d = str(digest, 'utf-8')
        self._store[str_digest] = data
        return self.xt_from_digest(digest)

    def delete(self, *xts):
        self.__doc__ = DeleteStore.delete.__doc__
        digests = [self.validate_xt(xt)[2] for xt in xts]
        for d in digests:
            del(self._store[d])

    def catalog(self):
        self.__doc__ = CatalogStore.catalog.__doc__
        return [self.xt_from_digest(digest) for digest in self._store.keys()]