# By: Riasat Ullah
# This file contains queries that handle taskcall email address storage in cache.

from utils import cache_names
import json


def store_email_assignees(client, assignees):
    '''
    Store the details of all api keys in cache.
    :param client: cache client
    :param assignees: (dict) -> {email: [org ID, for policy ID, for service ID], ...}
    '''
    assert isinstance(assignees, dict) and len(assignees) > 0
    data = dict()
    for email in assignees:
        data[email] = json.dumps(assignees[email])
    client.hmset(cache_names.email_assignees, data)


def get_email_assignees(client, emails):
    '''
    Get the details of a particular email assignee.
    :param client: cache client
    :param emails: (str or list of str) email addresses
    :return: (dict) -> {email: [org ID, for policy ID, for service ID], ...}
    '''
    if isinstance(emails, str):
        emails = [emails]

    json_details = client.hmget(cache_names.email_assignees, emails)
    data = dict()
    if json_details is not None and len(json_details) > 0:
        for i in range(0, len(json_details)):
            if json_details[i] is not None:
                data[emails[i]] = json.loads(json_details[i])
    return data


def remove_email_assignees(client, email):
    '''
    Removes the details of email assignee(s) from cache.
    :param client: cache client
    :param email: (str or list) email address(es)
    '''
    if isinstance(email, str):
        email = [email]
    if len(email) > 0:
        client.hdel(cache_names.email_assignees, *email)


def remove_all_email_assignees(client):
    '''
    Remove all email assignees from cache.
    :param client: cache client
    '''
    client.delete(cache_names.email_assignees)
