package com.fs.his.service;

import com.fs.common.core.page.TableDataInfo;
import com.fs.his.domain.FsDoctor;
import java.util.List;

public interface IPollingAssignDoctorService {

    /**
     * 获取下一个分配的药师（轮询分配）
     * @param prescribeCode 处方编号
     * @return 药师对象
     */
    FsDoctor getNextPharmacist(String prescribeCode);

    /**
     * 获取下一个分配的药师，并关联业务ID（兼容旧方法）
     * @param businessId 业务ID（处方编号）
     * @return 药师对象
     */
    FsDoctor getNextPharmacistWithPrescribeCode(String businessId);

    /**
     * 根据处方编号查询分配的药师
     * @param prescribeCode 处方编号
     * @return 分配记录字符串
     */
    String getPharmacistByPrescribeCode(String prescribeCode);

    /**
     * 查询某天的所有分配记录
     * @param date 日期（yyyy-MM-dd）
     * @return 记录列表
     */
    List<String> getRecordsByDate(String date);

    /**
     * 查询某药师某天的分配记录
     * @param doctorId 药师ID
     * @param date 日期（yyyy-MM-dd）
     * @return 记录列表
     */
    List<String> getRecordsByDoctorAndDate(Long doctorId, String date);

    /**
     * 重置轮询计数器
     */
    void resetRoundRobin();

    /**
     * 获取当前轮询索引
     * @return 当前索引值
     */
    Long getCurrentIndex();

    /**
     * 分页查询分配记录
     * @param date 日期（yyyy-MM-dd）
     * @param pageNum 页码
     * @param pageSize 每页条数
     * @return 表格分页数据
     */
    TableDataInfo getRecordsByDateWithPage(String date, Integer pageNum, Integer pageSize);

    /**
     * 分页查询某药师的分配记录
     * @param doctorId 药师ID
     * @param date 日期（yyyy-MM-dd）
     * @param pageNum 页码
     * @param pageSize 每页条数
     * @return 表格分页数据
     */
    TableDataInfo getRecordsByDoctorAndDateWithPage(Long doctorId, String date, Integer pageNum, Integer pageSize);
}