package com.zt.plat.module.base.service.tmpltp;

import java.util.*;

import com.zt.plat.module.base.controller.admin.templtp.vo.*;
import com.zt.plat.module.base.dal.dataobject.tmpltp.TemplateInstanceDO;
import jakarta.validation.*;

import com.zt.plat.framework.common.pojo.PageResult;
import jakarta.validation.constraints.NotEmpty;

/**
 * 模板实例 Service 接口
 *
 * @author 后台管理
 */
public interface TemplateInstanceService {

    /**
     * 创建模板实例
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    TemplateInstanceRespVO createTemplateInstance(@Valid TemplateInstanceSaveReqVO createReqVO);

    /**
     * 更新模板实例
     *
     * @param updateReqVO 更新信息
     */
    void updateTemplateInstance(@Valid TemplateInstanceSaveReqVO updateReqVO);

    /**
     * 删除模板实例
     *
     * @param id 编号
     */
    void deleteTemplateInstance(Long id);

    /**
    * 批量删除模板实例
    *
    * @param ids 编号
    */
    void deleteTemplateInstanceListByIds(List<Long> ids);

    /**
     * 获得模板实例
     *
     * @param id 编号
     * @return 模板实例
     */
    TemplateInstanceDO getTemplateInstance(Long id);

    /**
     * 获得模板实例分页
     *
     * @param pageReqVO 分页查询
     * @return 模板实例分页
     */
    PageResult<TemplateInstanceDO> getTemplateInstancePage(TemplateInstancePageReqVO pageReqVO);

    /**
     * 通过实例id获得部门
     *
     * @param instanId
     * @return 获取部门
     */
    List<String> getDeptByInstanId(Long instanId);

    /**
     * 发布模板实例
     *
     * @param publishReqVOS 发布参数
     */
    void publishTemplateInstance(List<PublishTemplateInstanceReqVO> publishReqVOS);

    /**
     * 获取模板实例详情
     *
     * @param templateInstanceRespVO 模板实例详情
     */
    void getDetailedInfo(TemplateInstanceRespVO templateInstanceRespVO);
    /**
     * 获得模板实例分页排除停用状态的
     *
     * @param pageReqVO 分页查询
     * @return 模板实例分页
     */
    PageResult<TemplateInstanceDO> listExcludingDisabled(@Valid TemplateInstancePageReqVO pageReqVO);

    /**
     * 停用启用
     *
     * @param reqVO 停用启用参数
     */
    void setDisableOrEnable(@Valid DisableEnableReqVO reqVO);

    /**
     * 创建版本
     *
     * @param id 模版实例id
     * @return 创建结果
     */
    TemplateInstanceRespVO createVersion(@Valid @NotEmpty(message = "模版实例id不能为空") String id);

    /**
     * 获取版本
     *
     * @param id 模版实例id
     * @return 获取结果
     */
    Map<String, Object> getVersion(String id);

    /**
     * 通过模版编码获取模版实例
     *
     * @param cdg 模版编码
     * @return 获取结果
     */
    List<TemplateInstanceRespVO> listByCdg(String cdg);
//
//    Map<String, Object> saveFile(MultipartFile file, String id);

    /**
     * 通过实例id，更新文件对象
     * @param id params
     *
     */
    void updateTemplateInstanceFileUrlByInstanceId(@Valid @NotEmpty(message = "模版实例id不能为空") String id, @Valid @NotEmpty(message = "文件参数不能为空") String params);
    /**
     * 获取字段和条款详情
     * @param id 模版实例id
     * @return 获取结果
     */
    FieldAndClauseRespVO getFieldAndClauseDetail(@Valid @NotEmpty(message = "模版实例id不能为空") String id);
    /**
     *  获取模版实例详情
     * @param id 模版实例id
     * @return 获取结果
     */
    TemplateInstanceRespVO getTemplateInstance(@Valid @NotEmpty(message = "模版实例id不能为空") String id);
}
