package com.openhis.administration.service;

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

import com.baomidou.mybatisplus.extension.service.IService;
import com.openhis.administration.domain.EncounterLocation;
import com.openhis.common.enums.EncounterActivityStatus;
import com.openhis.common.enums.LocationForm;

/**
 * 就诊位置管理Service接口
 *
 * @author system
 * @date 2025-02-20
 */
public interface IEncounterLocationService extends IService<EncounterLocation> {

    /**
     * 保存住院位置信息
     * 
     * @param encounterLocation 住院位置信息
     */
    void saveEncounterLocation(EncounterLocation encounterLocation);

    /**
     * 自定义插入或更新方法,根据就诊id，病区,判断是更新还是插入
     * 
     * @param encounterLocation 实体对象
     * @return 是否成功
     */
    boolean saveOrUpdateEncounterLocation(EncounterLocation encounterLocation);

    /**
     * 创建住院位置
     *
     * @param encounterId 住院id
     * @param startTime 开始时间
     * @param locationId 位置id
     * @param locationForm 位置类型
     */
    void creatEncounterLocation(Long encounterId, Date startTime, Long locationId, Integer locationForm);

    /**
     * 查询住院患者床位相关信息
     *
     * @param encounterId 住院id
     * @return 床位相关信息
     */
    List<EncounterLocation> getEncounterLocationInfo(Long encounterId,Long locationId);

    /**
     * 更新位置使用状态
     * 
     * @param encounterId 住院id
     * @param isTransfer 是否专科
     * @return 更新结果
     */
    Integer updateEncounterLocationStatus(Long encounterId, boolean isTransfer);

    /*
     * 根据就诊id查询就诊位置信息
     *
     * @param encounterId 就诊id
     * @return 就诊位置集合
     */
    List<EncounterLocation> getEncounterLocationList(Long encounterId);

    /**
     * 根据就诊id查询就诊位置信息(某个类型)(某个状态)
     * 
     * @param locationForm 类型
     * @param encounterActivityStatus 状态
     * @param encounterId 就诊id
     * @return 就诊位置集合
     */
    List<EncounterLocation> getEncounterLocationList(Long encounterId, LocationForm locationForm,
        EncounterActivityStatus encounterActivityStatus);

}