package com.ylx.project.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ylx.home.hot.domain.vo.ProjectSalesVO;
import com.ylx.home.search.domain.dto.SearchProjectDTO;
import com.ylx.massage.domain.dto.OptionDTO;
import com.ylx.massage.domain.dto.ServiceOptionDTO;
import com.ylx.massage.domain.vo.ProductOptionVO;
import com.ylx.massage.domain.vo.ProductServiceOptionVO;
import com.ylx.project.domain.Project;
import com.ylx.project.domain.bookMerchant.dto.BookMerchantDTO;
import com.ylx.project.domain.bookMerchant.vo.BookProjectDetailVO;
import com.ylx.project.domain.bookMerchant.vo.ProjectInfoVO;
import com.ylx.project.domain.dto.ProjectAddDTO;
import com.ylx.project.domain.dto.ProjectSearchDTO;
import com.ylx.project.domain.dto.ProjectUpdateDTO;
import com.ylx.project.domain.vo.ProjectBaseVo;
import com.ylx.project.domain.vo.ProjectDetailVo;
import com.ylx.project.domain.vo.ProjectPageVo;

import java.util.List;

public interface ProjectService extends IService<Project> {

    Page<ProjectPageVo> list(Page<Project> page, ProjectSearchDTO dto);

    void edit(ProjectUpdateDTO dto);

    void add(ProjectAddDTO dto);

    ProjectDetailVo getDetailsInfo(Long id);

    void deleteProjectById(Long id);

    IPage<ProductOptionVO> selectOptionUnionPage(Page page, OptionDTO dto);

    Page<ProductServiceOptionVO> selectServiceOptionsPage(Page page, ServiceOptionDTO dto);

    List<ProjectBaseVo> getProjectTabListByCategoryId(Integer categoryId);

    BookProjectDetailVO getBookingProjectDetail(BookMerchantDTO dto);

    List<ProjectBaseVo> listProjects();

    List<Project> selectProjectPage(long offset, long fetchCount);

    Long countValidProject();

    void batchUpdateSales(List<ProjectSalesVO> batch);

    List<ProjectSalesVO> selectAllProjectSalesCount();

    Page<ProjectInfoVO> homeSearchPage(SearchProjectDTO dto);
}
