package com.yhy.module.core.dal.mysql.quota;

import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.yhy.module.core.dal.dataobject.quota.QuotaRateFieldDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Collections;
import java.util.List;

/**
 * 定额费率字段绑定 Mapper
 */
@Mapper
public interface QuotaRateFieldMapper extends BaseMapperX<QuotaRateFieldDO> {

    /**
     * 根据费率项ID查询字段列表
     */
    default List<QuotaRateFieldDO> selectListByRateItemId(Long rateItemId) {
        return selectList(new LambdaQueryWrapperX<QuotaRateFieldDO>()
                .eq(QuotaRateFieldDO::getRateItemId, rateItemId)
                .orderByAsc(QuotaRateFieldDO::getFieldIndex));
    }

    /**
     * 根据费率项ID和字段索引查询
     */
    default QuotaRateFieldDO selectByRateItemIdAndFieldIndex(Long rateItemId, Integer fieldIndex) {
        return selectOne(new LambdaQueryWrapperX<QuotaRateFieldDO>()
                .eq(QuotaRateFieldDO::getRateItemId, rateItemId)
                .eq(QuotaRateFieldDO::getFieldIndex, fieldIndex));
    }

    /**
     * 删除费率项的所有字段
     */
    default int deleteByRateItemId(Long rateItemId) {
        return delete(new LambdaQueryWrapperX<QuotaRateFieldDO>()
                .eq(QuotaRateFieldDO::getRateItemId, rateItemId));
    }

    /**
     * 批量插入
     */
    default void insertBatch(List<QuotaRateFieldDO> fields) {
        for (QuotaRateFieldDO field : fields) {
            insert(field);
        }
    }

    /**
     * 根据费率项ID列表查询所有字段
     */
    default List<QuotaRateFieldDO> selectListByRateItemIds(@Param("rateItemIds") List<Long> rateItemIds) {
        if (rateItemIds == null || rateItemIds.isEmpty()) {
            return Collections.emptyList();
        }
        return selectList(new LambdaQueryWrapperX<QuotaRateFieldDO>()
                .in(QuotaRateFieldDO::getRateItemId, rateItemIds)
                .orderByAsc(QuotaRateFieldDO::getFieldIndex));
    }

    /**
     * 统计费率项的字段数量
     */
    default Long countByRateItemId(Long rateItemId) {
        return selectCount(new LambdaQueryWrapperX<QuotaRateFieldDO>()
                .eq(QuotaRateFieldDO::getRateItemId, rateItemId));
    }
}
