package org.example.mapper;

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

import java.util.List;

@Mapper
public interface HospitalRoomMapper {
    
    /**
     * 查询所有病房
     * @return 病房列表
     */
    List<HospitalRoom> findAll();
    
    /**
     * 根据条件查询病房
     * @param code 病房代码
     * @param department 所属科室
     * @param ward 所属病区
     * @param enabled 是否启用
     * @return 病房列表
     */
    List<HospitalRoom> findByConditions(@Param("code") String code, 
                                      @Param("department") String department, 
                                      @Param("ward") String ward, 
                                      @Param("enabled") Boolean enabled);
    
    /**
     * 根据病房代码查询病房
     * @param code 病房代码
     * @return 病房信息
     */
    HospitalRoom findByCode(String code);
    
    /**
     * 根据病房代码和所属病区查询病房数量
     * @param code 病房代码
     * @param belongWard 所属病区
     * @return 符合条件的病房数量
     */
    int countByCodeAndWard(@Param("code") String code, @Param("belongWard") String belongWard);
    
    /**
     * 根据病房代码和所属病区查询病房数量（排除指定病房）
     * @param code 病房代码
     * @param belongWard 所属病区
     * @param excludeCode 要排除的病房代码
     * @return 符合条件的病房数量
     */
    int countByCodeAndWardExcluding(@Param("code") String code, @Param("belongWard") String belongWard, @Param("excludeCode") String excludeCode);
    
    /**
     * 根据病房代码删除病房
     * @param code 病房代码
     */
    void deleteByCode(String code);
    
    /**
     * 插入新病房
     * @param room 病房信息
     */
    void insert(HospitalRoom room);
    
    /**
     * 更新病房信息
     * @param room 病房信息
     */
    void update(@Param("room") HospitalRoom room, @Param("originCode") String originCode);
}
