package cn.iocoder.yudao.module.configure.service.tracetemplate;

import java.util.*;
import javax.validation.*;

import cn.iocoder.yudao.module.configure.controller.admin.tracelink.vo.TraceLinkRespVO;
import cn.iocoder.yudao.module.configure.controller.admin.tracetemplate.vo.*;
import cn.iocoder.yudao.module.configure.dal.dataobject.tracetemplate.TraceTemplateDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;

/**
 * 溯源模板 Service 接口
 *
 * @author 芋道源码
 */
public interface TraceTemplateService {

    /**
     * 创建溯源模板
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createTraceTemplate(@Valid TraceTemplateCreateReqVO createReqVO);

    /**
     * 更新溯源模板
     *
     * @param updateReqVO 更新信息
     */
    void updateTraceTemplate(@Valid TraceTemplateUpdateReqVO updateReqVO);

    /**
     * 更新溯源模板环节配置
     * @param updateReqVO 更新信息
     */
    void  updateLinkConfig(@Valid LinkConfigUpdateReqVO updateReqVO);

    /**
     * 删除溯源模板
     *
     * @param id 编号
     */
    void deleteTraceTemplate(Long id);

    /**
     * 获得溯源模板
     *
     * @param id 编号
     * @return 溯源模板
     */
    TraceTemplateDO getTraceTemplate(Long id);

    /**
     * 获得溯源模板分页
     *
     * @param pageReqVO 分页查询
     * @return 溯源模板分页
     */
    PageResult<TraceTemplateRespVO> getTraceTemplatePage(TraceTemplatePageReqVO pageReqVO);

    /**
     * 根据商品id获取溯源模板
     * @param goodsId 商品id
     * @return 溯源模板列表
     */
    List<TraceTemplateRespVO> getTraceTemplateListByGoodsId(String goodsId);

    /**
     * 根据模板id获取环节列表
     * @param templateId 模板id
     * @return 环节列表
     */
    List<TraceLinkRespVO> getLinkListByTemplateId(String templateId);

    /**
     * 复制环节信息配置到溯源模板
     * @param copyReqVO 环节信息
     * @return 溯源模板id
     */
    Integer copyLinkConfigToTemplate(@Valid TraceTemplateCopyReqVO copyReqVO);

}
