package com.fs.hisStore.service;

import java.util.List;
import com.baomidou.mybatisplus.extension.service.IService;
import com.fs.common.core.domain.R;
import com.fs.course.param.CollectConfirmGeneratePrescribeParam;
import com.fs.course.param.CollectionBindUserParam;
import com.fs.course.param.CollectionInfoConfirmParam;
import com.fs.course.param.SubmitCollectionAnswerParam;
import com.fs.course.vo.FsUserInfoCollectionUVO;
import com.fs.his.domain.FsUserInformationCollectionSchedule;
import com.fs.hisStore.domain.FsUserInformationCollection;
import com.fs.hisStore.dto.FsUserInformationCollectionOverviewDTO;
import com.fs.hisStore.dto.PendingSalesInfoQueryDTO;
import com.fs.hisStore.param.FsUserInformationCollectionListDParam;
import com.fs.hisStore.param.FsUserInformationCollectionParam;
import com.fs.hisStore.param.bindCollectionPackageParam;
import com.fs.hisStore.vo.FsUserInformationCollectionListDVO;
import com.fs.hisStore.vo.FsUserInformationCollectionVO;
import com.fs.hisStore.vo.FsUserInformationCollectionOverviewVo;

/**
 * 用户信息采集Service接口
 * 
 * @author fs
 * @date 2025-10-14
 */
public interface IFsUserInformationCollectionService extends IService<FsUserInformationCollection>{
    /**
     * 查询用户信息采集
     * 
     * @param id 用户信息采集主键
     * @return 用户信息采集
     */
    FsUserInformationCollection selectFsUserInformationCollectionById(Long id);

    /**
     * 查询用户信息采集列表
     * 
     * @param fsUserInformationCollection 用户信息采集
     * @return 用户信息采集集合
     */
    List<FsUserInformationCollection> selectFsUserInformationCollectionList(FsUserInformationCollection fsUserInformationCollection);

    /**
     * 新增用户信息采集
     * 
     * @param fsUserInformationCollection 用户信息采集
     * @return 结果
     */
    Long insertFsUserInformationCollection(FsUserInformationCollectionParam fsUserInformationCollection);

    /**
     * 修改用户信息采集
     * 
     * @param fsUserInformationCollection 用户信息采集
     * @return 结果
     */
    Long updateFsUserInformationCollection(FsUserInformationCollectionParam fsUserInformationCollection);

    /**
     * 创建简化版用户采集信息
     *
     * @param fsUserInformationCollection 用户信息采集
     * @return 用户信息采集集合
     */
    FsUserInformationCollection createSimpleUserInfo(FsUserInformationCollectionParam fsUserInformationCollection);

    //个微版信息采集信息确认并生成处方
    R generateFormalPrescription(CollectConfirmGeneratePrescribeParam param);
    /**
     * 批量删除用户信息采集
     * 
     * @param ids 需要删除的用户信息采集主键集合
     * @return 结果
     */
    int deleteFsUserInformationCollectionByIds(Long[] ids);

    /**
     * 删除用户信息采集信息
     * 
     * @param id 用户信息采集主键
     * @return 结果
     */
    int deleteFsUserInformationCollectionById(Long id);


    FsUserInformationCollectionVO getInfo(FsUserInformationCollection fsUserInformationCollection);

    /**
     * 查询医生端用户信息采集列表(只查询未关联套餐包的信息采集)
     * @param param
     * @return
     */
    List<FsUserInformationCollectionListDVO> selectFsUserInformationCollectionListDVO(FsUserInformationCollectionListDParam param);

    FsUserInformationCollectionVO detail(Long id);

    R getWxaCodePackageOrderUnLimit(Long collectionId,String appId);
    //CID版信息采集二维码
    R getWxaCodePackageOrderUnLimitNew(Long collectionId,String appId);

    //客户信息表制单二维码
    R getCustomerGenerateQRCode(Long orderId,String appId);

    R doctorConfirm(FsUserInformationCollection collection);

    FsUserInfoCollectionUVO info(Long id,Long userId);

    R userConfirm(CollectionInfoConfirmParam param);

    //自动退款
    void autoRefund(FsUserInformationCollection collection,Integer operateType);

    //根据用户id查询信息采集详情
    FsUserInformationCollectionVO getCollectionByUserId(Long userId);

    /**
     * 根据第三方用户id和采集来源查询信息采集详情
     * @param infoSource 信息来源
     * @param thirdPartyUserId 第三方用户id
     * */
    FsUserInformationCollectionVO getCollectionByInfoSourceAndThirdPartyUserId(Integer infoSource,Long thirdPartyUserId);

    //1-取消 2-拒方
    R stopCollection(FsUserInformationCollectionSchedule param, Long operateId,Integer operateType);

    //销售帮助客户二次确认
    R salesHelpConfirm(Long collectionId, Long operateId);

    List<FsUserInformationCollection> selectFsUserInformationCollectionListByUserIds(List<Long> fsUserIds);
    //APP--查询用户是否有信息采集数据
    void hasUserCollectionInfo(Long userId);

    R addUserCollection(FsUserInformationCollectionParam param);

    /**
     * 用户信息采集列表总览
     *
     * @param queryDto 用户信息采集
     * @return 用户信息采集集合
     */
    List<FsUserInformationCollectionOverviewVo> selectUserInformationCollectionOverviewByPage(FsUserInformationCollectionOverviewDTO queryDto);

    /**
     * 导出用户信息采集列表
     *
     * @param queryDto 用户信息采集
     * @return 用户信息采集集合
     */
    List<FsUserInformationCollectionOverviewVo> selectExportUserInfoCollectionList(FsUserInformationCollectionOverviewDTO queryDto);

    /**
     * 信息采集绑定用户信息
     *
     * @param param 绑定参数
     * @return 是否绑定成功
     */
    R bindUser(CollectionBindUserParam param);

    /**
     * 提交用户填写采集信息问题(只有用户自主填写完采集信息时才调用)
     * */
    int submitCollectionAnswerParam(SubmitCollectionAnswerParam param);

    /**
     * 获取未绑定的用户信息采集列表
     * */
    List<FsUserInformationCollectionOverviewVo> getUnBindCollectionList(FsUserInformationCollectionOverviewDTO queryDto);

    /**
     * 获取销售代填配置
     * @return true: 允许销售代填, false: 不允许销售代填
     */
    boolean getSalesProxyFillConfig();

    /**
     * 获取待销售完善信息列表
     * @param queryDto 查询参数
     * @return 待销售信息列表
     */
    List<FsUserInformationCollectionOverviewVo> pendingSalesInfoList(PendingSalesInfoQueryDTO queryDto);

    /**
     * 提交待销售完善信息
     * @param fsUserInformationCollection 待完善信息
     */
    void submitSalesInfo(FsUserInformationCollectionParam fsUserInformationCollection);

    /**
     * 查询销售已完善信息采集列表
     * */
    List<FsUserInformationCollectionOverviewVo> fullyCollectionInfoList(FsUserInformationCollectionOverviewDTO queryDto);

    /**
     * 绑定个微信息采集套餐包
     * @param param 绑定参数
     * @return 是否绑定成功
     */
    Long bindCollectionPackage(bindCollectionPackageParam param);

    /**
     * 获取信息采集套餐包信息
     * @param collectionId 信息采集id
     * @return 信息采集套餐包信息
     */
    FsUserInformationCollection getCollectionPackageInfo(Long collectionId);

    /**
     * 重置CID信息采集
     * @param collectionId 信息采集id
     * @return 结果
     */
    int resetCIDCollection(Long collectionId,Long operatorId,String nickName);

    /**
     * 根据手机号查询已绑定用户的信息采集表数据
     * */
    List<FsUserInformationCollectionOverviewVo> selectUserInformationCollectionByPhone(String phone);
}
