package site.acsi.baidu.dog.web.controller;

import com.google.common.base.Preconditions;
import com.sun.javafx.binding.StringFormatter;
import lombok.SneakyThrows;
import org.springframework.web.bind.annotation.*;
import site.acsi.baidu.dog.enums.ApiResponseEnum;
import site.acsi.baidu.dog.global.DogMarketStore;
import site.acsi.baidu.dog.pojo.Pet;
import site.acsi.baidu.dog.vo.MarketListMergeRequest;
import site.acsi.baidu.dog.vo.MarketListResponse;
import site.acsi.baidu.dog.vo.base.BaseResponse;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;

/**
 * @author Acsi
 * @date 2018/2/18
 */
@RestController
@RequestMapping("/dogMarket")
public class DogMarketController {

    @Resource
    private DogMarketStore store;

    public static final String MARKET_LINK_FORMAT = "https://pet-chain.baidu.com/chain/detail?channel=market&petId=%s&appId=4&validCode=%s";

    @PostMapping("/merge")
    public BaseResponse merge(@RequestBody MarketListMergeRequest request) {
        Preconditions.checkNotNull(request);
        Preconditions.checkNotNull(request.getPets());
        store.put(request.getPets());
        return ApiResponseEnum.SUCCESS.getResponse();
    }

    @RequestMapping("marketLink")
    @SneakyThrows
    public String marketLink(@RequestParam String petId, HttpServletResponse response) {
        Pet pet = store.queryPetById(petId);
        if (pet == null) {
            return "没有在市场上找到这只狗狗。";
        }
        response.sendRedirect(StringFormatter.format(MARKET_LINK_FORMAT, pet.getPetId(), pet.getValidCode()).getValue());
        return "";
    }

    @RequestMapping("/marketList")
    public MarketListResponse marketList() {
        MarketListResponse marketListResponse = new MarketListResponse();
        marketListResponse.setStatus(0);
        marketListResponse.setMessage("success");
        marketListResponse.setPets(store.list());
        return marketListResponse;
    }
}