package com.ylx.web.controller.massage;


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ylx.common.annotation.Log;
import com.ylx.common.core.controller.BaseController;
import com.ylx.common.core.domain.R;
import com.ylx.common.enums.BusinessType;
import com.ylx.common.utils.StringUtils;
import com.ylx.massage.domain.Coupon;
import com.ylx.massage.domain.TLbt;
import com.ylx.massage.service.CouponService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

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

/**
 * 优惠券的规则信息(Coupon)表控制层
 *
 * @author makejava
 * @since 2024-05-13 16:32:58
 */
@Slf4j
@Api(tags = {"优惠劵管理"})
@RestController
@RequestMapping("coupon")
public class CouponController extends BaseController {
    /**
     * 服务对象
     */
    @Resource
    private CouponService couponService;

    /**
     * 分页查询所有优惠券数据（PC端）
     *
     * @param page   分页对象
     * @param coupon 查询实体
     * @return 所有数据
     */
    @RequestMapping(value = "/list", method = RequestMethod.GET)
    @ApiOperation("PC查询优惠劵管理列表")
    public R<Page<Coupon>> selectAll(Page<Coupon> page, Coupon coupon) {
        LambdaQueryWrapper<Coupon> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.like(StringUtils.isNotBlank(coupon.getName()), Coupon::getName, coupon.getName())
                .eq(coupon.getType() != null, Coupon::getType, coupon.getType())
                .eq(coupon.getDiscountType() != null, Coupon::getDiscountType, coupon.getDiscountType())
                .eq(StringUtils.isNotBlank(coupon.getDeptId()), Coupon::getDeptId, coupon.getDeptId())
                .eq(coupon.getStatus() != null, Coupon::getStatus, coupon.getStatus())
                .eq(coupon.getObtainWay() != null, Coupon::getObtainWay, coupon.getObtainWay())
                .eq(coupon.getTermDays() != null, Coupon::getTermDays, coupon.getTermDays())
                .eq(coupon.getUsedNum() != null, Coupon::getUsedNum, coupon.getUsedNum());
        return R.ok(this.couponService.page(page, queryWrapper));
    }

    /**
     * 通过主键查询单条数据
     *
     * @param id 主键
     * @return 单条数据
     */
    @GetMapping("getById")
    @ApiOperation("通过主键查询单条数据")
    public R selectOne(String id) {
        return R.ok(this.couponService.getById(id));
    }

    /**
     * 新增数据
     *
     * @param coupon 实体对象
     * @return 新增结果
     */
    @PostMapping("submit")
    @Log(title = "优惠劵管理新增数据", businessType = BusinessType.INSERT)
    @ApiOperation("新增数据")
    public R insert(@RequestBody Coupon coupon) {
        return R.ok(this.couponService.save(coupon));
    }

    /**
     * 修改数据
     *
     * @param coupon 实体对象
     * @return 修改结果
     */
    @PostMapping("update")
    @Log(title = "优惠劵管理修改数据", businessType = BusinessType.UPDATE)
    @ApiOperation("修改数据")
    public R update(@RequestBody Coupon coupon) {
        return R.ok(this.couponService.updateById(coupon));
    }

    /**
     * 删除数据
     *
     * @param idList 主键结合
     * @return 删除结果
     */
    @PostMapping("delete")
    @ApiOperation("删除数据")
    public R delete(@RequestBody List<Long> idList) {
        return R.ok(this.couponService.removeByIds(idList));
    }
}

