package com.jsowell.pile.service;

import com.jsowell.pile.domain.MemberGroup;
import com.jsowell.pile.dto.MemberGroupDTO;
import com.jsowell.pile.vo.base.MemberGroupConsumptionVO;
import com.jsowell.pile.vo.base.MemberGroupStationVO;
import com.jsowell.pile.vo.uniapp.customer.MemberVO;
import com.jsowell.pile.vo.web.MemberDiscountVO;
import com.jsowell.pile.vo.web.MemberGroupVO;
import com.jsowell.pile.vo.web.OrderListVO;

import java.util.List;

/**
 * 会员组Service接口
 *
 * @author jsowell
 * @date 2023-12-26
 */
public interface MemberGroupService {
    /**
     * 查询会员组
     *
     * @param id 会员组主键
     * @return 会员组
     */
    public MemberGroup selectMemberGroupById(Long id);

    /**
     * 查询会员组列表
     */
    public List<MemberGroupVO> selectMemberGroupList(MemberGroupDTO dto);

    /**
     * 新增会员组
     *
     * @param memberGroup 会员组
     * @return 结果
     */
    public int insertMemberGroup(MemberGroup memberGroup);

    /**
     * 修改会员组
     *
     * @param memberGroup 会员组
     * @return 结果
     */
    public int updateMemberGroup(MemberGroup memberGroup);

    /**
     * 批量删除会员组
     *
     * @param ids 需要删除的会员组主键集合
     * @return 结果
     */
    public int deleteMemberGroupByIds(Long[] ids);

    /**
     * 删除会员组信息
     *
     * @param id 会员组主键
     * @return 结果
     */
    public int deleteMemberGroupById(Long id);

    /**
     * 查询会员折扣
     *
     * @param merchantId
     * @param stationId
     * @param memberId
     * @return
     */
    MemberDiscountVO queryMemberDiscount(String merchantId, String stationId, String memberId);

    MemberDiscountVO queryMemberDiscountV2(String merchantId, String stationId, String memberId);

    int addMember(MemberGroupDTO dto);

    List<MemberVO> queryMemberList(MemberGroupDTO dto);

    MemberGroupVO queryByMerchantId(String merchantId);

    MemberGroupVO queryByGroupCode(String groupCode);

    /**
     * 通过站点id查询当前站点是否配置集团
     * @param stationId 站点信息
     * @return
     */
    MemberGroupVO queryByStationId(String stationId);

    /**
     * 添加会员到集团
     * 如果该站点配置的有集团，就把会员自动加入到集团中
     * 目前只有汇鑫大厦使用
     * @return
     */
    int addMember2MemberGroup(String memberId, String stationId);

    /**
     * 查询会员组/集团站点列表
     * @param dto
     * @return
     */
    List<MemberGroupStationVO> queryStationList(MemberGroupDTO dto);

    /**
     * 集团移除站点
     * @param dto
     * @return
     */
    int removeStationFromMemberGroup(MemberGroupDTO dto);

    /**
     * 集团移除会员
     * @param dto
     * @return
     */
    int removeMemberFromMemberGroup(MemberGroupDTO dto);

    /**
     * 根据memberGroup查询车辆消费记录
     */
    List<MemberGroupConsumptionVO> queryMemberGroupConsumptionList(String groupCode);

    /**
     * 查询车辆消费明细
     */
    List<OrderListVO> queryConsumptionDetailListByVinCode(String groupCode, String vinCode);
}
