package com.java2nb.novel.controller;


import com.java2nb.novel.core.cache.CacheKey;
import com.java2nb.novel.core.cache.CacheService;
import com.java2nb.novel.core.enums.ResponseStatus;
import com.java2nb.novel.service.BookService;
import com.java2nb.novel.service.FriendLinkService;
import com.java2nb.novel.service.NewsService;
import io.github.xxyopen.model.resp.RestResult;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author 11797
 */
@RequestMapping("cache")
@RestController
@Slf4j
@RequiredArgsConstructor
public class CacheController {

    @Value("${cache.manager.password}")
    private String cacheManagerPass;

    private final CacheService cacheService;

    private final BookService bookService;

    private final NewsService newsService;

    private final FriendLinkService friendLinkService;

    /**
     * 刷新缓存
     * @param type 缓存类型，1：首页书籍推荐，2：首页新闻，3：首页友情链接
     * */
    @GetMapping("refresh/{pass}/{type}")
    public RestResult<Void> refreshCache(@PathVariable("type") Byte type, @PathVariable("pass") String pass){
        if(!cacheManagerPass.equals(pass)){
            return RestResult.fail(ResponseStatus.PASSWORD_ERROR);
        }
        switch (type){
            case 1:{
                //刷新首页推荐书籍缓存
                cacheService.del(CacheKey.INDEX_BOOK_SETTINGS_KEY);
                bookService.listBookSettingVO();
                break;
            }
            case 2:{
                //刷新首页新闻缓存
                cacheService.del(CacheKey.INDEX_NEWS_KEY);
                newsService.listIndexNews();
                break;
            }
            case 3:{
                //刷新首页友情链接
                cacheService.del(CacheKey.INDEX_LINK_KEY);
                friendLinkService.listIndexLink();
                break;
            }
            default:{
                break;
            }

        }

        return RestResult.ok();
    }




}
