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.Encounter;
import com.openhis.administration.dto.EncounterAccountDto;
import com.openhis.administration.dto.EncounterDataDto;
import org.apache.ibatis.annotations.Param;

/**
 * 就诊管理Service接口
 *
 * @author system
 * @date 2025-02-20
 */
public interface IEncounterService extends IService<Encounter> {
    /**
     * 保存就诊信息
     * 
     * @param encounter 就诊信息
     * @return 保存后的信息
     */
    Long saveEncounterByRegister(Encounter encounter);

    /**
     * 退号
     * 
     * @param encounterId 就诊id
     */
    void returnRegister(Long encounterId);

    /**
     * 更新就诊管理
     *
     * @param encounter 就诊管理实体
     */
    boolean saveOrUpdateEncounter(Encounter encounter);

    /**
     * 通过 id 更新 priorityEnum 字段
     *
     * @param id Encounter 的 id
     * @param priorityEnum 要更新的 priorityEnum 值
     * @return 更新是否成功
     */
    boolean updatePriorityEnumById(Long id, Integer priorityEnum);

    /**
     * 通過busNo查詢對應的Encoounter信息（醫保用）
     * 
     * @param iptOtpNo
     */
    Encounter getByBusNo(String iptOtpNo);

    /**
     * 更新患者状态
     *
     * @param encounterId 就诊id
     * @param encounterStatus 状态
     * @return 更新数量
     */
    Integer updateEncounterStatus(Long encounterId, Integer encounterStatus);

    /**
     * 查询挂号信息
     * 
     * @param startDate 开始时间
     * @param endDate 结束时间
     * @return 集合
     */
    List<EncounterAccountDto> getEncounterInfoByTime(Date startDate, Date endDate);

    /**
     * Desc: 根据参数加载 患者记录信息
     * @param classEnum
     * @param encounterId
     * @Author raymond
     * @Date 12:34 2025/11/3
     * @return com.openhis.administration.dto.EncounterDataDto
     **/
    EncounterDataDto getPatientIdByParam(Integer classEnum,Long encounterId);
}