import redis
import json
from datetime import datetime, timedelta

from django.conf import settings

class RedisUtils:
    def __init__(self, host=settings.REDIS_HOST, port=settings.REDIS_PORT):
        self.redis_client = redis.Redis(host=host, port=port, decode_responses=True)
    
    def set_cache(self, request_id, image_index, data):
        """
        request_id: str
        data: dict
        image_index: int        
        """
        self.redis_client.hset(request_id, image_index, json.dumps(data))
        self.redis_client.expire(request_id, 3600)
    
    def get_all_cache(self, request_id):
        resutlt = {}
        for key, value in self.redis_client.hgetall(request_id).items():
            resutlt[key] = json.loads(value)
        return resutlt
    
    def get_specific_cache(self, request_id, key):
        return json.loads(self.redis_client.hget(request_id, key))

    def get_size(self, request_id):
        return self.redis_client.hlen(request_id)

    def remove_cache(self, request_id):
        self.redis_client.delete(request_id)

if __name__ == '__main__':
    _host = "127.0.0.1"
    _port = 6379
    Yujii_A = RedisUtils(_host, _port)
    Yujii_A.set_cache("SAP123", 1, {"status": 1})
    Yujii_A.set_cache("SAP123", 2, {"status": 2})
    Yujii_A.set_cache("SAP123", 3, {"status": 3})
    print("[INFO]: data for request_id: {}".format(Yujii_A.get_all_cache("SAP123")))
    print("[INFO]: len for request_id: {}".format(Yujii_A.get_size("SAP123")))

    Yujii_A.remove_cache("SAP123")
    print("[INFO]: data for request_id: {}".format(Yujii_A.get_all_cache("SAP123")))
    print("[INFO]: len for request_id: {}".format(Yujii_A.get_size("SAP123")))