package org.example.mapper;

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

import java.util.Date;
import java.util.List;

/**
 * 患者Mapper接口
 */
@Mapper
public interface PatientMapper {
    
    /**
     * 查询患者列表
     */
    List<Patient> findList(@Param("name") String name,
                           @Param("deptCode") String deptCode,
                           @Param("wardCode") String wardCode,
                           @Param("roomNo") String roomNo,
                           @Param("bedNo") String bedNo,
                           @Param("inpatientNo") String inpatientNo,
                           @Param("nurseLevel") String nurseLevel,
                           @Param("inpatientStatus") String inpatientStatus,
                           @Param("admissionDateStart") Date admissionDateStart,
                           @Param("admissionDateEnd") Date admissionDateEnd);
    
    /**
     * 根据ID查询患者
     */
    Patient findById(@Param("id") Long id);
    
    /**
     * 新增患者
     */
    int insert(Patient patient);
    
    /**
     * 更新患者
     */
    int update(Patient patient);
    
    /**
     * 删除患者
     */
    int deleteById(@Param("id") Long id);
    
    /**
     * 获取所有不重复的所属科室
     */
    List<String> findAllDeptCode();
    
    /**
     * 根据科室获取病区列表
     */
    List<String> findWardsByDept(@Param("deptCode") String deptCode);
    
    /**
     * 根据病区获取房间号列表
     */
    List<String> findRoomsByWard(@Param("wardCode") String wardCode);
    
    /**
     * 根据房间号获取床位号列表
     */
    List<String> findBedsByRoom(@Param("roomNo") String roomNo);
    
    /**
     * 获取所有不重复的在院状态
     */
    List<String> findAllInpatientStatus();
    
    /**
     * 获取所有不重复的护理级别
     */
    List<String> findAllNurseLevel();
}
