package cn.iocoder.yudao.module.system.service.worklog;

import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptRespVO;
import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.loginstance.LogInstanceNextOrUpVO;
import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.loginstance.LogInstancePageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.loginstance.LogInstanceRespVO;
import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.loginstance.LogInstanceSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogInstanceDO;
import com.baomidou.mybatisplus.core.metadata.IPage;

import javax.validation.Valid;
import java.util.List;

/**
 * 日志实例的拓展 Service 接口
 *
 * @author 符溶馨
 */
public interface LogInstanceService {

    /**
     * 创建日志实例
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createLogInstance(@Valid LogInstanceSaveReqVO createReqVO);

    /**
     * 更新日志实例
     *
     * @param updateReqVO 更新信息
     */
    void updateLogInstance(@Valid LogInstanceSaveReqVO updateReqVO);

    /**
     * 删除日志实例
     *
     * @param id 编号
     */
    void deleteLogInstance(Long id);

    /**
     * 获得日志实例
     *
     * @param id 编号
     * @return 日志实例的拓展
     */
    LogInstanceRespVO getLogInstance(Long id);

    /**
     * 获得日志实例分页
     *
     * @param pageReqVO 分页查询
     * @return 日志实例的拓展分页
     */
    IPage<LogInstanceRespVO> getLogInstancePage(LogInstancePageReqVO pageReqVO, Integer pagingType);

    /**
     * 获得我收到的日志页面中的部门列表
     */
    List<DeptRespVO> getDeptInfo();


    List<LogInstanceDO> getNeedWriteLogInstanceByTimeRange(Long fromId, List<String> time, Long userId);

//    /**
//     * 获取我需要填写的日志
//     *
//     * @param fromId
//     * @param userId
//     * @return
//     */
//    List<LogInstanceDO> getNeedWriteLogInstanceByTimeRange(Long fromId, List<String> time, Long userId);

    /**
     * 获取用户发送的上一篇日志详情
     *
     * @param formId 日志模板编号
     * @return 日志详情
     */
    LogInstanceDO getUpLog(Long formId);

    /**
     * 设置日志详情 模板内容和时间
     */
    LogInstanceRespVO setContentFun(LogInstanceRespVO logInstanceRespVO);

    /**
     * 获取上一篇 下一篇
     *
     * @param dto
     * @param id
     * @param pagingType
     * @return
     */
    LogInstanceNextOrUpVO getNextOrUp(LogInstancePageReqVO dto, Long id, Integer pagingType);
}