package com.gxwebsoft.open.controller;

import com.gxwebsoft.common.core.utils.CacheClient;
import com.gxwebsoft.common.core.utils.JSONUtil;
import com.gxwebsoft.common.core.web.ApiResult;
import com.gxwebsoft.common.core.web.BaseController;
import com.gxwebsoft.common.core.web.PageResult;
import com.gxwebsoft.shop.entity.Goods;
import com.gxwebsoft.shop.entity.OrderGoods;
import com.gxwebsoft.shop.param.GoodsParam;
import com.gxwebsoft.shop.service.GoodsService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 商品记录表控制器
 *
 * @author 科技小王子
 * @since 2022-11-23 12:47:16
 */
@Api(tags = "商品记录表管理")
@RestController
@RequestMapping("/api/open/goods")
public class OpenGoodsController extends BaseController {
    @Resource
    private GoodsService goodsService;
    @Resource
    private CacheClient cacheClient;

    @ApiOperation("分页查询商品记录表")
    @GetMapping("/page")
    public ApiResult<PageResult<Goods>> page(GoodsParam param) {
        // 验证签名
        isCheckSign();
        // 使用关联查询
        return success(goodsService.pageRel(param));
    }

    @ApiOperation("查询全部商品记录表")
    @GetMapping()
    public ApiResult<?> list(GoodsParam param) {
      return success(goodsService.listRel(param));
    }

    @ApiOperation("查询菜品列表(废弃)")
    @GetMapping("/getFoodList")
    public ApiResult<?> getFoodList(GoodsParam param) {
      // 验证签名
//      isCheckSign();
//      List<Goods> goods = goodsService.listRel(param);
//      // 给列表附加购买数量
//      ArrayList<Goods> list = new ArrayList<>(goods.size());
//      goods.forEach(d -> {
//        OrderGoods item = cacheClient.hGet(getKey(), d.getGoodsId().toString(), OrderGoods.class);
//        if(item != null){
//          d.setTotalNum(item.getTotalNum());
//        }else{
//          d.setTotalNum(0);
//        }
//        list.add(d);
//      });
//      return success(goodsService.listRel(param));

      // 计算购物车总金额及数量
//      int totalNum = cache.stream().mapToInt(OrderGoods::getTotalNum).sum();
//      BigDecimal totalPrice = cache.stream().filter(d -> d.getTotalNum() > 0).map(OrderGoods::getGoodsPrice).collect(Collectors.toList()).stream().reduce(BigDecimal.ZERO, BigDecimal::add);
//      Map<String, Object> map = new HashMap<>();
//      map.put("totalNum",totalNum);
//      map.put("totalPrice",totalPrice);
//      map.put("goodsList",list);
//      return success(map);
        return fail("已废弃");
    }

//    @PreAuthorize("hasAuthority('shop:goods:list')")
//    @OperationLog
//    @ApiOperation("根据id查询商品记录表")
//    @GetMapping("/{id}")
//    public ApiResult<Goods> get(@PathVariable("id") Integer id) {
//        return success(goodsService.getById(id));
//        // 使用关联查询
//        //return success(goodsService.getByIdRel(id));
//    }
//
//    @PreAuthorize("hasAuthority('shop:goods:save')")
//    @OperationLog
//    @ApiOperation("添加商品记录表")
//    @PostMapping()
//    public ApiResult<?> save(@RequestBody Goods goods) {
//        // 记录当前登录用户id、租户id
//        User loginUser = getLoginUser();
//        if (loginUser != null) {
//          goods.setUserId(loginUser.getUserId());
//        }
//        if (goodsService.save(goods)) {
//            return success("添加成功");
//        }
//        return fail("添加失败");
//    }
//
//    @PreAuthorize("hasAuthority('shop:goods:update')")
//    @OperationLog
//    @ApiOperation("修改商品记录表")
//    @PutMapping()
//    public ApiResult<?> update(@RequestBody Goods goods) {
//        if (goodsService.updateById(goods)) {
//            return success("修改成功");
//        }
//        return fail("修改失败");
//    }
//
//    @PreAuthorize("hasAuthority('shop:goods:remove')")
//    @OperationLog
//    @ApiOperation("删除商品记录表")
//    @DeleteMapping("/{id}")
//    public ApiResult<?> remove(@PathVariable("id") Integer id) {
//        if (goodsService.removeById(id)) {
//            return success("删除成功");
//        }
//        return fail("删除失败");
//    }
//
//    @PreAuthorize("hasAuthority('shop:goods:save')")
//    @OperationLog
//    @ApiOperation("批量添加商品记录表")
//    @PostMapping("/batch")
//    public ApiResult<?> saveBatch(@RequestBody List<Goods> list) {
//        if (goodsService.saveBatch(list)) {
//            return success("添加成功");
//        }
//        return fail("添加失败");
//    }
//
//    @PreAuthorize("hasAuthority('shop:goods:update')")
//    @OperationLog
//    @ApiOperation("批量修改商品记录表")
//    @PutMapping("/batch")
//    public ApiResult<?> removeBatch(@RequestBody BatchParam<Goods> batchParam) {
//        if (batchParam.update(goodsService, "goods_id")) {
//            return success("修改成功");
//        }
//        return fail("修改失败");
//    }
//
//    @PreAuthorize("hasAuthority('shop:goods:remove')")
//    @OperationLog
//    @ApiOperation("批量删除商品记录表")
//    @DeleteMapping("/batch")
//    public ApiResult<?> removeBatch(@RequestBody List<Integer> ids) {
//        if (goodsService.removeByIds(ids)) {
//            return success("删除成功");
//        }
//        return fail("删除失败");
//    }

    /**
     * 获取key
     * @return cache10048:cart651
     */
    private String getKey(){
      // 验证签名
      isCheckSign();
      return "cart".concat(getLoginUserId().toString());
    }

    /**
     * 获取购物车数据
     * @return
     */
    private List<OrderGoods> getCart(){
      String key = getKey();
      // 获取购物车数据
      List<Object> values = cacheClient.hValues(key);
      return values.stream().map(item -> JSONUtil.parseObject(JSONUtil.toJSONString(item), OrderGoods.class)).collect(Collectors.toList());
    }

}
