package cn.ysk.cashier.mybatis.service;

import cn.ysk.cashier.cons.TableConstant;
import cn.ysk.cashier.dto.shoptable.ReturnOrderDTO;
import cn.ysk.cashier.enums.OrderStatusEnums;
import cn.ysk.cashier.pojo.order.TbFullOrderDetail;
import cn.ysk.cashier.pojo.order.TbOrderDetail;
import com.baomidou.mybatisplus.extension.service.IService;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

/**
 * (TbShopPermission)表服务接口
 *
 * @author makejava
 * @since 2024-09-14 17:08:48
 */
public interface MpOrderDetailService extends IService<TbOrderDetail> {

    /**
     * 根据orderId和id修改detail状态
     * @param oldOrderStatusEnums 原始订单状态
     * @param orderStatusEnums 状态
     * @param orderId 订单id
     * @param orderDetails detailIds
     * @return 影响数量
     */
    boolean updateStatusByOrderIdAndIds(OrderStatusEnums oldOrderStatusEnums, OrderStatusEnums orderStatusEnums, Integer orderId, List<Integer> orderDetails);

    /**
     * 根据购物车id修改用餐类型
     * @param cartIds 购物车ids
     * @param useType 用餐类型
     * @return 是否成功
     */
    boolean updateUseTypeByCartIds(ArrayList<Integer> cartIds, String useType);

    /**
     * 根据订单id查询订单详情
     * @param orderId 订单id
     * @return 详情信息
     */
    List<TbOrderDetail> selectByOrderId(Integer orderId);

    /**
     * 根据订单id和状态获取订单详情
     */
    List<TbOrderDetail> selectByOrderIdAndState(Integer orderId, TableConstant.OrderInfo.Status... states);

    /**
     * 根据购物车id和订单id查询订单详情
     * @param shopId 店铺id
     * @param cartIdList 购物车id
     * @param orderId 订单id
     * @return 详情信息
     */
    List<TbOrderDetail> selectByCartIdOrOrderId(Integer shopId, List<Integer> cartIdList, Integer orderId);

    /**
     * 根据订单id修改详情状态
     * @param status 状态
     * @param orderId 订单id
     */
    boolean updateStatusByOrderId(TableConstant.OrderInfo.Status status, Integer orderId);

    /**
     * 根据购物车id修改detail价格
     * @param cartId 购物车id
     * @param totalAmount 总价格
     */
    boolean updatePriceByCartId(Integer cartId, BigDecimal saleAmount, BigDecimal totalAmount);

    /**
     * 根据会员id修改detail信息
     * @param orderId 订单id
     * @param isMember 会员id
     */
    boolean updateMemberByOrderId(Integer orderId, boolean isMember);
}

