# By: Riasat Ullah
# This file contains cache queries for task instances.

from objects.live_call_routing import LiveCallRouting
from utils import cache_names, helpers
import json


def store_single_live_call(client, lcr):
    '''
    Stores a new live call in the cache.
    :param client: cache client
    :param lcr: LiveCallRouting object
    :errors: AssertionError, KeyError
    '''
    assert isinstance(lcr, LiveCallRouting)
    if lcr.twilio_call_sid is None:
        raise KeyError('Twilio CallSid missing from LiveCallRouting object. Cannot cache without Twilio CallSid.')
    else:
        client.hset(cache_names.live_calls, lcr.twilio_call_sid,
                    json.dumps(lcr.to_dict(), default=helpers.jsonify_unserializable))


def get_single_live_call(client, call_sid):
    '''
    Gets a single LiveCallRouting object given its CallSid.
    :param client: cache client
    :param call_sid: Twilio CallSid
    :return: LiveCallRouting object
    '''
    json_lcr = client.hget(cache_names.live_calls, call_sid)
    if json_lcr is not None:
        return LiveCallRouting.create_live_call_routing(json.loads(json_lcr))
    else:
        return None


def remove_live_call(client, call_sid):
    '''
    Remove a live call from the cache
    :param client: cache client
    :param call_sid: Twilio CallSid of the live call routing to delete
    '''
    client.hdel(cache_names.live_calls, call_sid)
