package com.softwarebr.nunu.service.go;

import com.brframework.commonweb.json.PageParam;
import com.softwarebr.nunu.dto.go.PolicyLabelParamDTO;
import com.softwarebr.nunu.dto.go.PolicyParamDTO;
import com.softwarebr.nunu.entity.go.Policy;
import com.brframework.commondb.core.EntityService;
import com.softwarebr.nunu.entity.go.PolicyLabel;
import com.softwarebr.nunu.json.admin.go.PolicyLabelParam;
import com.softwarebr.nunu.json.admin.visual.PolicyCollectionResult;
import org.springframework.data.domain.Page;

import java.time.LocalDateTime;
import java.util.List;

/**
 * @date 2020-02-19 15:35:44
 * @author lilin
 */

public interface PolicyService extends EntityService<Policy, Long, Object> {

    Page<Policy> relativePage(PageParam page, List<PolicyLabel> policyLabel);


    /**
     * 平台添加政策
     * @param policyParamDTO 参数数据
     * @param labelParamDTOS 标签参数数据
     */
    void savePolicy(PolicyParamDTO policyParamDTO, List<PolicyLabelParamDTO> labelParamDTOS);

    /**
     * 平台修改政策
     * @param policyId 政策Id
     * @param policyParamDTO 参数数据
     * @param labelParamDTOS 标签参数数据
     */
    void updatePolicy(Long policyId, PolicyParamDTO policyParamDTO, List<PolicyLabelParamDTO> labelParamDTOS);

    /**
     * 政策删除
     * @param policyId 政策Id
     */
    void removePolicyById(Long policyId);

    /***
     * 政策审核
     * @param policyId 政策Id
     * @param verify 审核结果
     * @param remark 审核备注
     */
    void updatePolicyVerify(Long policyId, Integer verify, String remark);

    /**
     * 保存爬虫政策
     * @param source 来源
     * @param title 政策名称
     * @param content 政策详情
     * @param publishTime 发布时间
     */
    void saveSpiderPolicy(String source, String title, String content, LocalDateTime publishTime);

    /**
     * 政策下架
     * @param policyId 政策Id
     */
    void policyLowerShelf(Long policyId);

    /**
     * 政策上架
     * @param policyId 政策Id
     */
    void policyUpperShelf(Long policyId);

    /**
     * 政策推荐至首页
     * @param policyId
     */
    void policyIndexYes(Long policyId);

    /**
     * 政策取消推荐至首页
     * @param policyId
     */
    void policyIndexNo(Long policyId);

    /**
     * 政策收集
     * @param minDateTime 时间区间最小
     * @param maxDateTime 时间区间最大
     * @param days 默认天数
     * @return
     */
    List<PolicyCollectionResult> getPolicyCollectionTotal(String minDateTime, String maxDateTime, Long days);

    /**
     * 如果来源和名称相同则为同个政策
     * @param source
     * @param title
     * @return
     */
    boolean checkPolicy(String source, String title);

}