package com.ruoyi.frequency.works.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.common.core.domain.entity.SysDictData;
import com.ruoyi.controller.req.DrawingDetailsPageReq;
import com.ruoyi.controller.req.WorksPageReq;
import com.ruoyi.controller.req.WorksReleaseReq;
import com.ruoyi.controller.resp.OrderWorksPricePage;
import com.ruoyi.controller.resp.WorksDetailResp;
import com.ruoyi.frequency.works.entity.Works;
import com.ruoyi.frequency.works.model.result.WorksCount;
import com.ruoyi.response.ResponseData;
import com.ruoyi.vo.BodyIdReq;
import com.ruoyi.vo.UserVo;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 作品Service接口
 *
 * @author zj
 * @date 2023-09-22
 */
public interface WorksService extends IService<Works>
{
    /**
     * 查询作品
     *
     * @param id 作品主键
     * @return 作品
     */
    public Works selectWorksById(Long id);

    /**
     * 查询作品列表
     *
     * @param works 作品
     * @return 作品集合
     */
    public List<Works> selectWorksList(Works works);


    WorksCount statistics(Works works);

    /**
     * 新增作品
     *
     * @param works 作品
     * @return 结果
     */
    public int insertWorks(Works works);

    /**
     * 修改作品
     *
     * @param works 作品
     * @return 结果
     */
    public int updateWorks(Works works);

    /**
     * 批量删除作品
     *
     * @param ids 需要删除的作品主键集合
     * @return 结果
     */
    public int deleteWorksByIds(Long[] ids);

    /**
     * 删除作品信息
     *
     * @param id 作品主键
     * @return 结果
     */
    public int deleteWorksById(Long id);


    /**
     * 作品发布
     * @param req
     * @param userVo
     * @return
     */
    ResponseData worksRelease(WorksReleaseReq req, UserVo userVo);

    /**
     * 作品列表
     * @param req
     * @param userVo
     * @return
     */
    ResponseData worksPage(WorksPageReq req, UserVo userVo);


    /**
     * 作品详情
     * @param id
     * @param userVo
     * @param isAddBrowseNum  是否增加浏览数 1不增加 2 加
     * @return
     */
    ResponseData worksDetail(Long id,Integer isAddBrowseNum,UserVo userVo);

    Map<Long, Works> selectWorksMap(Set<Long> worksIds);

    ResponseData<OrderWorksPricePage> drawingDetailsPage(DrawingDetailsPageReq req, UserVo userVo);

    ResponseData hideWork(BodyIdReq req, UserVo userVo);

    ResponseData<List<SysDictData>> getHaveWorkCategory(WorksPageReq req);
}
