package com.softwarebr.nunu.service.hall;

import com.brframework.commondb.core.EntityService;
import com.softwarebr.nunu.dto.hall.InvestParamDTO;
import com.softwarebr.nunu.dto.hall.TeamParamDTO;
import com.softwarebr.nunu.entity.hall.Invest;
import com.softwarebr.nunu.entity.hall.Team;
import com.softwarebr.nunu.json.admin.visual.InvestProjectResult;
import com.softwarebr.nunu.json.api.hall.InvestDetailsResult;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * @date 2020-02-25 12:03:51
 * @author lilin
 */

public interface InvestService extends EntityService<Invest, Long, Object> {


    /**
     * 保存创新项目信息
     * @param memberId 发布者 -1为平台
     * @param investParamDTO
     * @param teamParamDTOS 团队介绍
     */
    Invest saveInvest(Long memberId, InvestParamDTO investParamDTO, List<TeamParamDTO> teamParamDTOS);

    /**
     * 修改创新项目信息
     * @param investId 创新项目Id
     * @param investParamDTO 参数数据
     * @param teamParamDTOS 项目团队参数数据
     */
    void updateInvest(Long investId, InvestParamDTO investParamDTO, List<TeamParamDTO> teamParamDTOS);

    /**
     * 融资阶段处理
     * @return
     */
    Map<Integer, String> investStateMap();

    /**
     * 行业分类处理
     * @return
     */
    Map<Integer, String> industryMap();

    /**
     * 文件处理
     * @param detailImagesUri 图片拼接字符串
     * @return
     */
    List<String> detailImagesUrisHandle(String detailImagesUri);

    /**
     * 创新项目详情
     * @param investId 创新项目Id
     * @param memberId 当前查看详情用户Id
     * @return
     */
    InvestDetailsResult getInvestDetails(Long investId, Long memberId);

    /**
     * 项目审核
     * @param id 创新项目Id
     * @param verify 审核结果
     * @param verifyRemark 审核备注
     */
    void investVerify(Long id, Integer verify, String verifyRemark);

    /**
     * 时间区间统计项目总数
     * @param minDateTime 时间区间最小
     * @param maxDateTime 时间区间最大
     * @param days 默认天数
     * @return
     */
    InvestProjectResult getInvestProjectTotal(String minDateTime, String maxDateTime, Long days);

    /**
     * oss文件地址转文件流
     * @param filePath 文件地址
     * @param response
     * @throws IOException
     */
    void downLoadFile(String filePath, HttpServletResponse response) throws IOException;

    /**
     * 项目上架
     * @param investId 创新项目Id
     */
    void investUpperShelf(Long investId);

    /**
     * 项目下架
     * @param investId 创新项目Id
     */
    void investLowerShelf(Long investId);

    /**
     * 项目推荐至首页
     * @param investId 创新项目Id
     */
    void investIndexYes(Long investId);

    /**
     * 项目取消推荐至首页
     * @param investId 创新项目Id
     */
    void investIndexNo(Long investId);
}