package com.tutego.ch_04.caching;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;

import java.util.Arrays;

// defaults to java.util.concurrent.ConcurrentHashMap configurable through auto-configuration
@EnableCaching
@SpringBootApplication(scanBasePackageClasses = CachingModule.class)
public class CachingApplication {

    private final Logger logger = LoggerFactory.getLogger(getClass());
    private final HotProfileToJsonConverter converter;

    public CachingApplication(HotProfileToJsonConverter converter) {
        // https://github.com/cglib/cglib
        // com.tutego.ch_04.caching.HotProfileToJsonConverter$$SpringCGLIB$$0
        logger.info("proxied bean: {}", converter.getClass().getName());
        this.converter = converter;
    }

    @Bean
    public ApplicationRunner runAtStartTime() {
        return args -> {
            var firstCall = converter.hotAsJson(Arrays.asList(1L, 2L, 3L));
            var secondCachedCall = converter.hotAsJson(Arrays.asList(1L, 2L, 3L));
        };
    }

    public static void main(String... args) {
        SpringApplication.run(CachingApplication.class, args);
    }

}