package com.starry.admin.modules.custom.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.starry.admin.modules.custom.module.entity.PlayCustomLevelInfoEntity;
import com.starry.admin.modules.system.module.entity.SysTenantEntity;
import java.math.BigDecimal;
import java.util.List;

/**
 * 顾客等级Service接口
 *
 * @author admin
 * @since 2024-05-04
 */
public interface IPlayCustomLevelInfoService extends IService<PlayCustomLevelInfoEntity> {

    /**
     * 初始化顾客等级
     *
     * @param sysTenantEntity
     *            租户细信息
     * @author admin
     * @since 2024/7/19 15:13
     **/
    void initDefaultLevel(SysTenantEntity sysTenantEntity);

    /**
     * 获取新增顾客时，默认最低等级ID
     *
     * @return PlayCustomLevelInfoEntity
     */
    PlayCustomLevelInfoEntity getDefaultLevel();

    /**
     * 查询顾客等级列表
     *
     * @return 顾客等级集合
     */
    List<PlayCustomLevelInfoEntity> selectAll();

    /**
     * 查询顾客等级
     *
     * @param id
     *            顾客等级主键
     * @return 顾客等级
     */
    PlayCustomLevelInfoEntity selectPlayCustomLevelInfoById(String id);

    /**
     * 查询顾客等级列表
     *
     * @return 顾客等级集合
     */
    List<PlayCustomLevelInfoEntity> selectPlayCustomLevelInfoByPage();

    /**
     * 新增顾客等级
     *
     * @param playCustomLevelInfo
     *            顾客等级
     * @return 结果
     */
    boolean create(PlayCustomLevelInfoEntity playCustomLevelInfo);

    /**
     * 修改顾客等级
     *
     * @param playCustomLevelInfo
     *            顾客等级
     * @return 结果
     */
    boolean update(PlayCustomLevelInfoEntity playCustomLevelInfo);

    /**
     * 批量删除顾客等级
     *
     * @param ids
     *            需要删除的顾客等级主键集合
     * @return 结果
     */
    int deletePlayCustomLevelInfoByIds(String[] ids);

    /**
     * 删除顾客等级信息
     *
     * @param id
     *            顾客等级主键
     * @return 结果
     */
    int deletePlayCustomLevelInfoById(String id);

    /**
     * 查询最大等级
     *
     * @return 最大等级
     */
    int selectMaxLevel();

    /**
     * 删除最大等级
     */
    void delMaxLevelByLevel(Integer level);

    /**
     * 根据累计消费金额匹配顾客等级。
     *
     * @param tenantId 租户ID
     * @param totalConsumption 累计消费金额
     * @return 匹配到的等级，未匹配则返回 {@code null}
     */
    PlayCustomLevelInfoEntity matchLevelByConsumption(String tenantId, BigDecimal totalConsumption);
}
