package com.ylx.massage.mapper;

import java.util.List;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ylx.companion.domain.dto.CompanionAllMerchantsDTO;
import com.ylx.companion.domain.vo.CompanionAllMerchantsVo;
import com.ylx.companion.domain.vo.HotCompanionProjectVO;
import com.ylx.home.category.domain.dto.ProjectRecommendDTO;
import com.ylx.massage.domain.MaProject;
import com.ylx.massage.domain.dto.MaProjectAuditQueryDTO;
import com.ylx.home.category.domain.dto.MerchantsDto;
import com.ylx.massage.domain.vo.MaProjectAuditListVO;
import com.ylx.massage.domain.vo.MaProjectOpenServiceVO;
import com.ylx.home.category.domain.vo.MerchantsVo;
import com.ylx.home.category.domain.vo.ProjectRecommendVo;
import com.ylx.project.domain.bookMerchant.dto.BookMerchantDTO;
import com.ylx.project.domain.bookMerchant.vo.BookMerchantVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

/**
 * 服务项目Mapper接口
 *
 * @author ylx
 * @date 2024-03-20
 */
@Mapper
public interface MaProjectMapper extends BaseMapper<MaProject> {
    /**
     * 查询服务项目
     *
     * @param id 服务项目主键
     * @return 服务项目
     */
    public MaProject selectMaProjectById(Long id);

    /**
     * 查询服务项目列表
     *
     * @param maProject 服务项目
     * @return 服务项目集合
     */
    public List<MaProject> selectMaProjectList(MaProject maProject);

    /**
     * 查询技能审核列表
     *
     * @param page 分页参数
     * @param dto 查询条件
     * @return 技能审核分页列表
     */
    Page<MaProjectAuditListVO> selectProjectAuditList(Page<MaProjectAuditListVO> page,
                                                      @Param("dto") MaProjectAuditQueryDTO dto);

    /**
     * 查询商户申请开通的项目列表
     *
     * @param merchantId 商户ID
     * @return 商户申请开通项目列表
     */
    List<MaProjectOpenServiceVO> selectMerchantOpenProjectList(@Param("merchantId") Long merchantId);

    /**
     * 查询技能审核记录
     *
     * @param projectAuditId 技能审核记录ID
     * @return 技能审核记录
     */
    MaProject selectProjectAuditById(@Param("projectAuditId") Long projectAuditId);

    /**
     * 提交技能开通审核
     *
     * @param maProject 技能审核记录
     * @return 影响行数
     */
    int submitProjectAudit(@Param("maProject") MaProject maProject);

    /**
     * 新增服务项目
     *
     * @param maProject 服务项目
     * @return 结果
     */
    public int insertMaProject(MaProject maProject);

    /**
     * 修改服务项目
     *
     * @param maProject 服务项目
     * @return 结果
     */
    public int updateMaProject(MaProject maProject);

    /**
     * 删除服务项目
     *
     * @param id 服务项目主键
     * @return 结果
     */
    public int deleteMaProjectById(Long id);

    /**
     * 批量删除服务项目
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteMaProjectByIds(String[] ids);

    /**
     * 首页按摩项目推荐
     *
     * @param page
     * @return
     */
    Page<ProjectRecommendVo> getProjectRecommend(@Param("page") Page<ProjectRecommendVo> page, @Param("dto") ProjectRecommendDTO dto);

    Page<MerchantsVo> getMerchants(@Param("page") Page<MerchantsVo> page, @Param("dto") MerchantsDto dto);

    Page<BookMerchantVO> selectMerchantList(@Param("page") Page<BookMerchantVO> page, @Param("dto") BookMerchantDTO dto);
    /**
     * 根据业务项目ID和商户ID查询项目
     */
    @Select("SELECT * FROM ma_project WHERE project_id = #{projectId} AND merchant_id = #{merchantId} AND is_delete = 0 LIMIT 1")
    MaProject selectByProjectIdAndMerchantId(@Param("projectId") Long projectId, @Param("merchantId") Long merchantId);

    /**
     * 根据城市编码查询热门陪玩项目列表
     * @param page
     * @param cityCode
     * @return
     */
    Page<HotCompanionProjectVO> getHotCompainonProjectList(@Param("page") Page<HotCompanionProjectVO> page, @Param("cityCode") String cityCode, @Param("categoryId") Integer categoryId);

    Page<CompanionAllMerchantsVo> getCompanionAllMerchants(@Param("page") Page<CompanionAllMerchantsVo> page, @Param("dto") CompanionAllMerchantsDTO dto);

}
