package com.microservices.zone.project.service;

import com.alibaba.fastjson2.JSONObject;
import com.microservices.common.core.web.page.GenericsTableDataInfo;
import com.microservices.zone.project.domain.vo.*;

import java.util.List;

/**
 * 特色专区项目聚合Service接口
 *
 * @author otto
 * @date 2023-05-11
 */
public interface IZoneProjectService {
    /**
     * 查询特色专区项目聚合
     *
     * @param id 特色专区项目聚合主键
     * @return 特色专区项目聚合
     */
    public ZoneProjectDataVo selectZoneProjectDataById(Long id);

    /**
     * 查询特色专区项目聚合列表
     *
     * @param zoneProjectSearchVo 特色专区项目聚合
     * @param isOpen
     * @return 特色专区项目聚合集合
     */
    public GenericsTableDataInfo<ZoneProjectDataVo> selectZoneProjectList(ZoneProjectSearchVo zoneProjectSearchVo, boolean isOpen);

    /**
     * 新增特色专区项目聚合
     *
     * @param zoneProjectInputVo 特色专区项目聚合
     * @return 结果
     */
    public int insertZoneProject(ZoneProjectInputVo zoneProjectInputVo);

    /**
     * 修改特色专区项目聚合
     *
     * @param id
     * @param zoneProjectUpdateVo 特色专区项目聚合
     * @return 结果
     */
    public int updateZoneProject(Long id, ZoneProjectUpdateVo zoneProjectUpdateVo);

    /**
     * 批量删除特色专区项目聚合
     *
     * @param ids 需要删除的特色专区项目聚合主键集合
     * @return 结果
     */
    public int deleteZoneProjectByIds(Long[] ids);

    /**
     * 删除特色专区项目聚合信息
     *
     * @param id 特色专区项目聚合主键
     * @return 结果
     */
    public int deleteZoneProjectById(Long id);

    /**
     * 查询GitLink中项目语言列表
     *
     * @return
     */
    List<ProjectLanguageVo> selectGitlinkProjectLanguages();

    /**
     * 查询GitLink项目列表
     *
     * @param zoneId
     * @param gitLinkProjectSearchVo
     * @return
     */
    GenericsTableDataInfo<JSONObject> selectGitlinkProjectList(Long zoneId, GitLinkProjectSearchVo gitLinkProjectSearchVo);

    /**
     * 批量新增特色专区项目聚合
     *
     * @param zoneProjectInputVoList
     * @return
     */
    int insertBatchZoneProject(List<ZoneProjectInputVo> zoneProjectInputVoList);

    /**
     * 获取项目聚合数量
     *
     * @param zoneProjectSearchVo
     * @return
     */
    Integer selectZoneProjectListCount(ZoneProjectSearchVo zoneProjectSearchVo);

    /**
     * 设置是否首页展示
     *
     * @param id
     * @return
     */
    int updateZoneProjectHomePageShow(Long id);

    /**
     * 获取专区下项目首页推荐数量
     *
     * @param zoneId
     * @return
     */
    Integer selectHomepageCount(Long zoneId);

    List<JSONObject> selectZoneProjectByScoreList(ZoneProjectSearchVo zoneProjectSearchVo, boolean isOpen);
}
