from uuid import uuid4

from django.core.cache import cache

from .access import shaped_rows

FINDER_CACHE_VERSION_KEY = "schools:finder:cache-version"
FINDER_CACHE_TIMEOUT = 30


def invalidate_finder_cache():
    cache.set(FINDER_CACHE_VERSION_KEY, uuid4().hex, timeout=None)


def finder_cache_version():
    version = cache.get(FINDER_CACHE_VERSION_KEY)
    if version is None:
        version = uuid4().hex
        cache.add(FINDER_CACHE_VERSION_KEY, version, timeout=None)
        version = cache.get(FINDER_CACHE_VERSION_KEY, version)
    return version


def finder_rows(user):
    version = finder_cache_version()
    key = f"schools:finder:{version}:user:{user.pk}"
    return cache.get_or_set(key, lambda: shaped_rows(user), timeout=FINDER_CACHE_TIMEOUT)