package org.example.mapper;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.example.entity.HospitalBed;

import java.util.List;

@Mapper
public interface HospitalBedMapper {
    
    /**
     * 查询所有床位
     * @return 床位列表
     */
    List<HospitalBed> findAll();
    
    /**
     * 根据床位代码查询床位
     * @param code 床位代码
     * @return 床位信息
     */
    HospitalBed findByCode(String code);
    
    /**
     * 根据床位名称模糊查询床位列表
     * @param name 床位名称
     * @return 床位列表
     */
    List<HospitalBed> findByNameContaining(String name);
    
    /**
     * 根据所属科室模糊查询床位列表
     * @param belongDept 所属科室
     * @return 床位列表
     */
    List<HospitalBed> findByBelongDeptContaining(String belongDept);
    
    /**
     * 根据所属病区模糊查询床位列表
     * @param belongWard 所属病区
     * @return 床位列表
     */
    List<HospitalBed> findByBelongWardContaining(String belongWard);
    
    /**
     * 根据启用状态查询床位列表
     * @param enabled 是否启用
     * @return 床位列表
     */
    List<HospitalBed> findByEnabled(Boolean enabled);
    
    /**
     * 检查是否存在指定代码的床位（用于唯一性检查）
     * @param code 床位代码
     * @param excludeCode 要排除的代码（更新时使用）
     * @return 床位列表
     */
    List<HospitalBed> findByCodeExcluding(String code, String excludeCode);
    
    /**
     * 插入新床位
     * @param bed 床位信息
     */
    void insert(HospitalBed bed);
    
    /**
     * 更新床位信息
     * @param bed 床位信息
     */
    void update(@Param("bed") HospitalBed bed, @Param("originCode") String originCode);
    
    /**
     * 根据床位代码删除床位
     * @param code 床位代码
     */
    void deleteByCode(String code);
}