package com.softwarebr.nunu.service.res;

import com.brframework.commonweb.json.PageParam;
import com.softwarebr.nunu.dto.res.ProjectParamDTO;
import com.softwarebr.nunu.entity.res.Project;
import com.brframework.commondb.core.EntityService;
import com.softwarebr.nunu.json.api.center.ProjectDetailsResult;
import com.softwarebr.nunu.json.api.center.PropertyDetailsResult;
import com.softwarebr.nunu.json.api.center.ResProjectQueryParam;
import org.springframework.data.domain.Page;

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

/**
 * @date 2020-02-21 11:47:29
 * @author lilin
 */

public interface ProjectService extends EntityService<Project, Long, Object> {

    /**
     * 项目类型集合
     * @return
     */
    Map<Integer, String> typeMap();

    /**
     * 项目状态集合
     * @return
     */
    Map<Integer, String> statusMap();

    /**
     * 更新项目对接状态
     * @param projectId
     * @param status
     */
    void updateStatus(Long projectId, Integer status);

    /**
     * 查询招聘详情
     * @param id 项目资源ID
     * @param memberId 当前查看详情用户
     * @return
     */
    ProjectDetailsResult getProjectDetails(Long id, Long memberId);

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

    /**
     * 分页查询
     * @param page
     * @param param
     * @return
     */
    Page<Project> pageV1(PageParam page, ResProjectQueryParam param);

    /**
     * 项目类型数据统计
     * @param type 项目类型{@link Project}
     * @return
     */
    Long countProjectByType(Integer type);

    /**
     * 项目资源保存
     * @param publisher 发布者 -1为平台
     * @param projectParamDTO 参数数据
     * @return
     */
    Project saveProject(Long publisher, ProjectParamDTO projectParamDTO);

    /**
     * 修改项目资源
     * @param projectId 项目资源Id
     * @param projectParamDTO 参数数据
     */
    void updateProject(Long projectId, ProjectParamDTO projectParamDTO);

    /**
     * 删除项目资源
     * @param projectId 项目资源ID
     */
    void removeProjectById(Long projectId);

    /**
     * 项目资源上架
     * @param projectId 项目资源ID
     */
    void projectUpperShelf(Long projectId);

    /**
     * 项目资源下架
     * @param projectId 项目资源ID
     */
    void projectLowerShelf(Long projectId);

    /**
     * 项目资源项目推荐至首页
     * @param projectId 项目资源ID
     */
    void projectIndexYes(Long projectId);

    /**
     * 项目资源取消推荐至首页
     * @param projectId 创新项目Id
     */
    void projectIndexNo(Long projectId);
}