package edu.whut.config;

import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import com.google.common.eventbus.EventBus;
import edu.whut.trigger.listener.OrderPaySuccessListener;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.concurrent.TimeUnit;

@Configuration
public class GuavaConfig {

    @Bean(name = "weixinAccessToken")  // 注册名为 weixinAccessToken 的缓存 Bean
    public Cache<String, String> weixinAccessToken() {
        // 创建一个 Guava 本地缓存：写入后 2 小时过期
        return CacheBuilder.newBuilder()
                .expireAfterWrite(2, TimeUnit.HOURS)  // 设置缓存条目在写入后 2 小时自动失效
                .build();
    }

    @Bean(name = "openidToken")  // 注册名为 openidToken 的缓存 Bean
    public Cache<String, String> openidToken() {
        // 创建一个 Guava 本地缓存：写入后 1 小时过期
        return CacheBuilder.newBuilder()
                .expireAfterWrite(1, TimeUnit.HOURS)  // 设置缓存条目在写入后 1 小时自动失效
                .build();
    }

    /**
     * 定义全局 EventBus，用于发布并订阅应用内事件
     * 在此注册 OrderPaySuccessListener，使其能够接收支付成功事件
     */
    @Bean
    public EventBus eventBusListener(OrderPaySuccessListener listener){
        EventBus eventBus = new EventBus();
        // 注册监听器，监听器会被自动调用事件处理方法
        eventBus.register(listener);
        return eventBus;
    }

}
