package router

import (
	"time"

	"github.com/labstack/echo/v4"

	cache "github.com/SporkHubr/echo-http-cache"
	"github.com/SporkHubr/echo-http-cache/adapter/memory"

	"github.com/dimaskiddo/go-whatsapp-multidevice-rest/pkg/log"
)

func HttpCacheInMemory(cap int, ttl int) echo.MiddlewareFunc {
	// Check if Cache Capacity is Zero or Less
	if cap <= 0 {
		// Set Default Cache Capacity
		cap = 1000
	}

	// Check if Cache TTL is Zero or Less
	if ttl <= 0 {
		// Set Default Cache TTL
		ttl = 5
	}

	// Create New In-Memory Cache Adapter
	memcache, err := memory.NewAdapter(
		// Set In-Memory Cache Adapter Algorithm to LRU
		// and With Desired Capacity
		memory.AdapterWithAlgorithm(memory.LRU),
		memory.AdapterWithCapacity(cap),
	)

	if err != nil {
		log.Print(nil).Error(err.Error())
		return nil
	}

	// Create New Cache
	cache, err := cache.NewClient(
		// Set Cache Adapter with In-Memory Cache Adapter
		// and Set Cache TTL in Second(s)
		cache.ClientWithAdapter(memcache),
		cache.ClientWithTTL(time.Duration(ttl)*time.Second),
	)

	if err != nil {
		log.Print(nil).Error(err.Error())
		return nil
	}

	// Return Cache as Echo Middleware
	return cache.Middleware()
}
