package cn.ysk.cashier.mybatis.rest;

import cn.ysk.cashier.annotation.Log;
import cn.ysk.cashier.exception.BadRequestException;
import cn.ysk.cashier.mybatis.entity.Activate;
import cn.ysk.cashier.mybatis.service.ShopService;
import cn.ysk.cashier.service.WxService;
import cn.ysk.cashier.utils.CacheKey;
import cn.ysk.cashier.utils.RedisUtils;
import cn.ysk.cashier.utils.SecurityUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

@Slf4j
@RestController
@RequiredArgsConstructor
@Api(tags = "/shop/storage")
@RequestMapping("/shop/storage")
public class StorageController {
    private final ShopService shopService;
    private final RedisUtils redisUtils;
    private final WxService wxService;

    @GetMapping("/findActivate")
    public ResponseEntity<Object> findActivate(@RequestParam String shopId){
        String userName  = SecurityUtils.getCurrentUsername();
        return new ResponseEntity<>(shopService.findActivate(shopId), HttpStatus.OK);
    }

    @Log("修改活动数据")
    @PostMapping("/modityActivate")
    public ResponseEntity<Object> modityActivate(@RequestBody Activate activate){
        if (activate.getIsGiftPro() != null && activate.getIsGiftPro() == 1 && CollectionUtils.isEmpty(activate.getProducts()))
            throw new BadRequestException("赠送商品不可为空");
        String userName  = SecurityUtils.getCurrentUsername();
        shopService.modityActivate(activate);
        return new ResponseEntity<>(HttpStatus.OK);
    }

    @GetMapping("/activate/{activateId}")
    @ApiOperation("查询活动赠送商品")
    public ResponseEntity<Object> queryActivatePros(@PathVariable("activateId") Integer activateId){
        return new ResponseEntity<>(shopService.findActivatePros(activateId),HttpStatus.OK);
    }

    /**
     * @param params
     *      shopId 必填
     *      env_version 存在即生成体验版
     * @return
     */
    @PostMapping("/getwxacode")
    public ResponseEntity<Object> getwxacode(@RequestBody Map<String, Object> params) {
        if (CollectionUtils.isEmpty(params) || !params.containsKey("shopId"))
            throw new BadRequestException("参数错误");
        if (redisUtils.hasKey(CacheKey.VIPCODE + params.get("shopId")))
            return new ResponseEntity<>(redisUtils.get(CacheKey.VIPCODE + params.get("shopId")), HttpStatus.OK);
        return new ResponseEntity<>(wxService.getFetchQRCode(params), HttpStatus.OK);
    }
}
