package com.ruoyi.info.collection.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.info.collection.domain.dto.*;
import com.ruoyi.info.collection.domain.excel.CcdiIntermediaryEnterpriseRelationExcel;
import com.ruoyi.info.collection.domain.excel.CcdiIntermediaryEntityExcel;
import com.ruoyi.info.collection.domain.excel.CcdiIntermediaryPersonExcel;
import com.ruoyi.info.collection.domain.vo.CcdiIntermediaryEnterpriseRelationVO;
import com.ruoyi.info.collection.domain.vo.CcdiIntermediaryEntityDetailVO;
import com.ruoyi.info.collection.domain.vo.CcdiIntermediaryPersonDetailVO;
import com.ruoyi.info.collection.domain.vo.CcdiIntermediaryRelativeVO;
import com.ruoyi.info.collection.domain.vo.CcdiIntermediaryVO;

import java.util.List;

/**
 * 中介Service接口
 *
 * @author ruoyi
 * @date 2026-02-04
 */
public interface ICcdiIntermediaryService {

    /**
     * 分页查询中介列表
     *
     * @param page     分页对象
     * @param queryDTO 查询条件
     * @return 中介VO分页结果
     */
    Page<CcdiIntermediaryVO> selectIntermediaryPage(Page<CcdiIntermediaryVO> page, CcdiIntermediaryQueryDTO queryDTO);

    /**
     * 查询个人中介详情
     *
     * @param bizId 人员ID
     * @return 个人中介详情VO
     */
    CcdiIntermediaryPersonDetailVO selectIntermediaryPersonDetail(String bizId);

    /**
     * 查询中介亲属列表
     *
     * @param bizId 中介本人ID
     * @return 亲属列表
     */
    List<CcdiIntermediaryRelativeVO> selectIntermediaryRelativeList(String bizId);

    /**
     * 查询中介亲属详情
     *
     * @param relativeBizId 亲属ID
     * @return 亲属详情
     */
    CcdiIntermediaryRelativeVO selectIntermediaryRelativeDetail(String relativeBizId);

    /**
     * 查询实体中介详情
     *
     * @param socialCreditCode 统一社会信用代码
     * @return 实体中介详情VO
     */
    CcdiIntermediaryEntityDetailVO selectIntermediaryEntityDetail(String socialCreditCode);

    /**
     * 新增个人中介
     *
     * @param addDTO 新增DTO
     * @return 结果
     */
    int insertIntermediaryPerson(CcdiIntermediaryPersonAddDTO addDTO);

    /**
     * 修改个人中介
     *
     * @param editDTO 编辑DTO
     * @return 结果
     */
    int updateIntermediaryPerson(CcdiIntermediaryPersonEditDTO editDTO);

    /**
     * 新增中介亲属
     *
     * @param bizId  中介本人ID
     * @param addDTO 新增DTO
     * @return 结果
     */
    int insertIntermediaryRelative(String bizId, CcdiIntermediaryRelativeAddDTO addDTO);

    /**
     * 修改中介亲属
     *
     * @param editDTO 编辑DTO
     * @return 结果
     */
    int updateIntermediaryRelative(CcdiIntermediaryRelativeEditDTO editDTO);

    /**
     * 删除中介亲属
     *
     * @param relativeBizId 亲属ID
     * @return 结果
     */
    int deleteIntermediaryRelative(String relativeBizId);

    /**
     * 新增实体中介
     *
     * @param addDTO 新增DTO
     * @return 结果
     */
    int insertIntermediaryEntity(CcdiIntermediaryEntityAddDTO addDTO);

    /**
     * 修改实体中介
     *
     * @param editDTO 编辑DTO
     * @return 结果
     */
    int updateIntermediaryEntity(CcdiIntermediaryEntityEditDTO editDTO);

    /**
     * 查询中介关联机构列表
     *
     * @param bizId 中介本人ID
     * @return 关联机构列表
     */
    List<CcdiIntermediaryEnterpriseRelationVO> selectIntermediaryEnterpriseRelationList(String bizId);

    /**
     * 查询中介关联机构详情
     *
     * @param id 主键ID
     * @return 关联机构详情
     */
    CcdiIntermediaryEnterpriseRelationVO selectIntermediaryEnterpriseRelationDetail(Long id);

    /**
     * 新增中介关联机构
     *
     * @param bizId  中介本人ID
     * @param addDTO 新增DTO
     * @return 结果
     */
    int insertIntermediaryEnterpriseRelation(String bizId, CcdiIntermediaryEnterpriseRelationAddDTO addDTO);

    /**
     * 修改中介关联机构
     *
     * @param editDTO 编辑DTO
     * @return 结果
     */
    int updateIntermediaryEnterpriseRelation(CcdiIntermediaryEnterpriseRelationEditDTO editDTO);

    /**
     * 删除中介关联机构
     *
     * @param id 主键ID
     * @return 结果
     */
    int deleteIntermediaryEnterpriseRelation(Long id);

    /**
     * 批量删除中介
     *
     * @param ids 需要删除的ID数组
     * @return 结果
     */
    int deleteIntermediaryByIds(String[] ids);

    /**
     * 校验中介本人证件号码唯一性
     *
     * @param personId 人员ID
     * @param bizId    排除的人员ID
     * @return true=唯一, false=不唯一
     */
    boolean checkPersonIdUnique(String personId, String bizId);

    /**
     * 校验统一社会信用代码唯一性
     *
     * @param socialCreditCode 统一社会信用代码
     * @param excludeId        排除的ID
     * @return true=唯一, false=不唯一
     */
    boolean checkSocialCreditCodeUnique(String socialCreditCode, String excludeId);

    /**
     * 导入个人中介数据
     *
     * @param list          Excel实体列表
     * @return 结果
     */
    String importIntermediaryPerson(List<CcdiIntermediaryPersonExcel> list);

    /**
     * 导入中介实体关联关系
     *
     * @param list Excel实体列表
     * @return 任务ID
     */
    String importIntermediaryEnterpriseRelation(List<CcdiIntermediaryEnterpriseRelationExcel> list);

    /**
     * 导入实体中介数据
     *
     * @param list          Excel实体列表
     * @return 结果
     */
    String importIntermediaryEntity(List<CcdiIntermediaryEntityExcel> list);
}
