package com.yc.ship.module.marketing.service.policy;

import java.util.*;
import javax.validation.*;
import com.yc.ship.module.marketing.controller.admin.policy.vo.*;
import com.yc.ship.module.marketing.dal.dataobject.policy.PolicyDO;
import com.yc.ship.framework.common.pojo.PageResult;
import com.yc.ship.framework.common.pojo.PageParam;

/**
 * 营销政策 Service 接口
 *
 * @author 管理员
 */
public interface PolicyService {

    /**
     * 创建营销政策
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createPolicy(@Valid PolicySaveReqVO createReqVO);

    /**
     * 更新营销政策
     *
     * @param updateReqVO 更新信息
     */
    void updatePolicy(@Valid PolicySaveReqVO updateReqVO);

    /**
     * 删除营销政策
     *
     * @param id 编号
     */
    void deletePolicy(Long id);

    /**
     * 获得营销政策
     *
     * @param id 编号
     * @return 营销政策
     */
    PolicyDO getPolicy(Long id);

    /**
     * 获得营销政策分页
     *
     * @param pageReqVO 分页查询
     * @return 营销政策分页
     */
    PageResult<PolicyDO> getPolicyPage(PolicyPageReqVO pageReqVO);

    /**
     * 获取可以使用的营销政策
     * @param reqVO
     * @return
     */
    List<PolicyRespVO> getUsablePolicy(PolicyUsableReqVO reqVO);

    /**
     * 根据航次ID获取可以使用的营销政策
     * @param voyageId
     * @return
     */
    List<PolicyRespVO> getUsablePolicyByVoyageId(Long voyageId);
}