package com.njcn.rdms.module.project.service.product;

import com.njcn.rdms.framework.common.pojo.PageResult;
import com.njcn.rdms.module.project.controller.admin.product.vo.product.ProductContextRespVO;
import com.njcn.rdms.module.project.controller.admin.product.vo.product.ProductDeleteReqVO;
import com.njcn.rdms.module.project.controller.admin.product.vo.product.ProductPageReqVO;
import com.njcn.rdms.module.project.controller.admin.product.vo.product.ProductSaveReqVO;
import com.njcn.rdms.module.project.controller.admin.product.vo.product.ProductStatusActionReqVO;
import com.njcn.rdms.module.project.controller.admin.product.vo.setting.ProductSettingBaseInfoUpdateReqVO;
import com.njcn.rdms.module.project.dal.dataobject.product.ProductDO;

/**
 * 产品 Service 接口
 */
public interface ProductService {

    /**
     * 创建产品
     *
     * @param createReqVO 创建请求
     * @return 产品编号
     */
    Long createProduct(ProductSaveReqVO createReqVO);

    /**
     * 更新产品
     *
     * @param updateReqVO 更新请求
     */
    void updateProduct(ProductSaveReqVO updateReqVO);

    /**
     * 更新产品设置页基础信息
     *
     * @param productId 产品编号
     * @param reqVO 更新请求
     */
    void updateProductBaseInfo(Long productId, ProductSettingBaseInfoUpdateReqVO reqVO);

    /**
     * 获取产品详情
     *
     * @param id 产品编号
     * @return 产品信息
     */
    ProductDO getProduct(Long id);

    /**
     * 获取产品上下文
     *
     * @param id 产品编号
     * @return 产品上下文
     */
    ProductContextRespVO getProductContext(Long id);

    /**
     * 获取产品分页
     *
     * @param pageReqVO 分页请求
     * @return 分页结果
     */
    PageResult<ProductDO> getProductPage(ProductPageReqVO pageReqVO);

    /**
     * 变更产品状态
     *
     * @param reqVO 状态动作请求
     */
    void changeProductStatus(ProductStatusActionReqVO reqVO);

    /**
     * 删除产品
     *
     * @param reqVO 删除请求
     */
    void deleteProduct(ProductDeleteReqVO reqVO);

}
