package cn.iocoder.yudao.module.member.service.diningplates;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.member.controller.admin.diningplates.vo.DiningPlatesPageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.diningplates.vo.DiningPlatesSaveReqVO;
import cn.iocoder.yudao.module.member.controller.admin.diningplates.vo.DiningPlatesStoreVO;
import cn.iocoder.yudao.module.member.controller.app.diningplates.vo.AppUserInfo;
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserInfoCardVO;
import cn.iocoder.yudao.module.member.dal.dataobject.diningplates.DiningPlatesDO;

import javax.validation.Valid;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * 餐盘 Service 接口
 *
 * @author 开发账号
 */
public interface DiningPlatesService {

    /**
     * 创建餐盘
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createDiningPlates(@Valid DiningPlatesSaveReqVO createReqVO);

    void insertDiningPlates(DiningPlatesDO diningPlatesDO);

    /**
     * 更新餐盘
     *
     * @param updateReqVO 更新信息
     */
    void updateDiningPlates(@Valid DiningPlatesSaveReqVO updateReqVO);

    /**
     * 删除餐盘
     *
     * @param id 编号
     */
    void deleteDiningPlates(Long id);

    /**
     * 获得餐盘
     *
     * @param id 编号
     * @return 餐盘
     */
    DiningPlatesDO getDiningPlates(Long id);

    DiningPlatesDO getDiningPlatesByNum(String diningPlatesNum,Long storeId);

    /**
     * 获得餐盘分页
     *
     * @param pageReqVO 分页查询
     * @return 餐盘分页
     */
    PageResult<DiningPlatesDO> getDiningPlatesPage(DiningPlatesPageReqVO pageReqVO);

    /**
     * 获取扣费餐盘
     *
     * @param time
     * @param abnormalTime
     */
    Map<String,List<DiningPlatesDO>>  getDiningPlatesToCharging(Integer time,Integer abnormalTime);

    /**
     * 修改付费状态
     */
    void  updatePayFlag(List<Long> ids,String payStatus);

    /**
     * 解绑
     */
    void  updateBind(List<Long> ids);

    /**
     * 餐盘列表
     * @return
     */
    List<DiningPlatesDO> getDiningPlatesList();

    /**
     * 绑定
     * @return
     */
    AppUserInfoCardVO  bind(String diningPlatesNum,String cardId,Long storeId);

    AppUserInfoCardVO bindByFace(String diningPlatesNum, Long faceId, Long storeId,String mobile,String faceData);

    Boolean checkBind(String diningPlatesNum,Long storeId);

    AppUserInfoCardVO appCheckBind(String diningPlatesNum, Long storeId);

    List<DiningPlatesStoreVO> getDiningPlatesNum(LocalDateTime localDateTime, Integer time);

    void unbind(String diningPlatesNum,Long storeId);

    AppUserInfo getMoney(String diningPlatesNum, Long dishId,Long storeId);

    /**
     * 获取绑定餐盘列表
     * @return
     */
    List<String> getBindDiningPlatesList();

    Map<String, String> checkBindAndUnBind(String diningPlatesNum, Long storeId);

    BigDecimal getOrderMoney(Long orderId);

    void updateById(DiningPlatesDO diningPlatesDO);
}