import time
from utils_v2.system import files
from utils_v2.cache_v2.async_mem_cache import AsyncMemCache
from utils_v2.cache_v2.async_disk_cache import AsyncDiskCache
import asyncio

async def main():

    proj_dir = files.get_file_directory(include_filename = False)
    proj_dir = files.get_parent_directory(proj_dir, depth = 1)
    print("PROJ. DIR.:", proj_dir)

    memcache = AsyncMemCache()
    # diskcache = AsyncDiskCache(
    #     caching_dir = os.path.join(proj_dir, "local"),
    #     lock_on_read = False,
    #     lock_wait_timeout = 5.0,
    #     expiry_check_interval = 60.0
    # )

    cache = memcache

    # print("\n\n---\n\n")
    # print("EXPIRY CHECK:")
    # await cache.set("k1", "v1", expiry = 3.0)
    # print(await cache.get("k1"))
    # time.sleep(3.1)
    # print(await cache.get("k1"))

    print("\n\n---\n\n")
    print("DELETE CHECK:")
    await cache.set("k1", "v1", expiry = 30.0)
    await cache.set("k2", "v2", expiry = 30.0)
    await cache.set("k3", "v3", expiry = 30.0)
    print("LIST:", await cache.list_keys())
    print("LIST:", await cache.list_keys(match = "k[1-2]"))
    print(await cache.get("k1"))
    await cache.delete("k1")
    print(await cache.get("k1"))
    print("LIST:", await cache.list_keys())

    # print("\n\n---\n\n")
    # print("COUNTING:")
    # count = await cache.count("c1", expiry = 3.1)
    # for i in range(10):
    #     time.sleep(1.0)
    #     count = await cache.count("c1", expiry = 3.0, raise_exception = True)
    #     ttl = await cache.ttl("c1")
    #     print(count, await cache.get("c1"), ttl)
    # print("OUTSIDE LOOP!")
    # print(await cache.get("c1"))
    # time.sleep(3.1)
    # print(await cache.get("c1"))

asyncio.run(main())
