package com.bonus.material.codeCollection.mapper;

import com.bonus.material.codeCollection.domain.WsMaInfo;
import com.bonus.material.ma.domain.Type;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;
import java.util.Objects;

/**
 * WsMaInfoMapper
 * 机具信息表（ws_ma_info）对应的 MyBatis 映射接口
 * 提供基础的增删改查（CRUD）数据库操作方法
 */
@Mapper
public interface WsMaInfoMapper {

    /**
     * 根据主键 ID 查询单条机具信息
     *
     * @param id 主键ID
     * @return 对应的 WsMaInfo 实体对象
     */
    WsMaInfo selectById(Integer id);

    /**
     * 查询所有机具信息
     *
     * @return 机具信息列表
     */
    List<WsMaInfo> selectAll(WsMaInfo info);

    /**
     * 插入一条新的机具记录
     *
     * @param info 机具实体对象（不含ID，ID自动生成）
     * @return 插入成功的记录数（通常为1）
     */
    int insert(WsMaInfo info);

    /**
     * 根据实体对象更新机具信息（根据 ID 进行更新）
     *
     * @param info 机具实体对象（必须含有 ID）
     * @return 更新成功的记录数
     */
    int update(WsMaInfo info);

    /**
     * 根据主键 ID 删除一条机具信息
     *
     * @param id 主键ID
     * @return 删除成功的记录数（通常为1）
     */
    int deleteById(Integer id);

    /**
     * 获取机具类型下拉选
     *
     * @return 机具类型集合
     */
    @MapKey("id")
    List<Map<String, Objects>> getMaTypeData();

    /**
     * 获取机具规格下拉选
     *
     * @return 机具规格集合
     */
    @MapKey("id")
    List<Map<String, Objects>> getMaModeData(Integer parentId);

    /**
     * 获取出厂厂家
     *
     * @return 出厂厂家集合
     */
    @MapKey("id")
    List<Map<String, Objects>> getSupplier();

    /**
     * 判断编码是否存在
     * @param maCode  编码
     * @return 条数
     */
    int existsByModelAndCode(@Param("maCode") String maCode);

    /**
     * 更新时间
     *
     * @return 条数
     */
    int updateCheckTime(WsMaInfo  info);

    /**
     * 获取机具信息
     * @param info 查询条件
     * @return 机具信息集合
     */
    List<WsMaInfo> getGadgetList(WsMaInfo info);

    /**
     * 新增机具信息
     * @param info 机具信息
     * @return 条数
     */
    int addWsMaInfoData(WsMaInfo info);

    /**
     * 根据编码查询机具信息
     * @param info 查询条件
     * @return 机具信息集合
     */
    int selectCountByCode(WsMaInfo info);

    /**
     * 删除小工具编码信息
     * @param info 删除条件
     * @return 条数
     */
    int delGadget(WsMaInfo info);

    /**
     * 根据ID获取小工具信息
     * @param id ID
     * @return 机具信息
     */
    WsMaInfo getGadgetInfo(Integer id);

    /**
     * 根据机型、规格、编码查询机具信息
     * @param info 查询条件
     * @return 机具信息
     */
    WsMaInfo getInfoByTypeAndModelAndCode(WsMaInfo info);

    /**
     * 更新小工具信息
     * @param info 更新条件
     * @return 条数
     */
    int updateGadgetInfo(WsMaInfo info);

    /**
     * 根据级别查询所有匹配的记录
     * @param level
     * @param typeName
     * @return
     */
    // 根据级别查询所有r匹配的记录
    List<Type> listByLevelAndName(@Param("level") String level, @Param("typeName") String typeName);

    Type selectTypeRelation(@Param("parentLevel") String parentLevel,
                            @Param("parentName") String parentName,
                            @Param("childLevel") String childLevel,
                            @Param("childName") String childName);
}
