package com.nbport.zgwl.partner.mapper;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.nbport.zgwl.partner.dto.PartnerContactDto;
import com.nbport.zgwl.partner.dto.PartnerManageDto;
import com.nbport.zgwl.partner.dto.PartnerQueryDto;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 相对方管理 Mapper
 */
public interface PartnerManageMapper {

    /** 获取相对方主表序列（Oracle 主键生成） */
    Long selectPartnerSeqNextVal();

    /** 获取联系人表序列（Oracle 主键生成） */
    Long selectPartnerContactSeqNextVal();

    /** 分页查询相对方列表 */
    IPage<PartnerManageDto> selectPartnerPage(Page<PartnerManageDto> page, @Param("query") PartnerQueryDto queryDto);

    /** 根据主键查询单条相对方详情 */
    PartnerManageDto selectPartnerById(@Param("customerSysid") Long customerSysid);

    /** 新增相对方 */
    int insertPartner(PartnerManageDto partner);

    /** 修改相对方 */
    int updatePartner(PartnerManageDto partner);

    /** 批量逻辑删除相对方 */
    int deletePartnerByIds(@Param("customerSysids") List<Long> customerSysids,
                           @Param("updateBy") String updateBy,
                           @Param("updateTime") LocalDateTime updateTime,
                           @Param("isDeleted") String isDeleted);

    /** 根据相对方 ID 列表批量查询联系人 */
    List<PartnerContactDto> selectPartnerContactsByPartnerIds(@Param("partnerRecordIds") List<Long> partnerRecordIds);

    /** 逻辑删除某个相对方下的所有联系人 */
    int markPartnerContactsDeletedByPartnerId(@Param("partnerRecordId") Long partnerRecordId,
                                              @Param("updateBy") String updateBy,
                                              @Param("updateTime") LocalDateTime updateTime,
                                              @Param("delFlag") String delFlag);

    /** 批量逻辑删除多个相对方下的所有联系人 */
    int markPartnerContactsDeletedByPartnerIds(@Param("partnerRecordIds") List<Long> partnerRecordIds,
                                               @Param("updateBy") String updateBy,
                                               @Param("updateTime") LocalDateTime updateTime,
                                               @Param("delFlag") String delFlag);

    /** 批量插入联系人 */
    int batchInsertPartnerContacts(@Param("contacts") List<PartnerContactDto> contacts,
                                   @Param("createBy") String createBy,
                                   @Param("createTime") LocalDateTime createTime,
                                   @Param("updateBy") String updateBy,
                                   @Param("updateTime") LocalDateTime updateTime,
                                   @Param("delFlag") String delFlag);

    /** 更新同步状态（回写法务系统返回的 oppositeId） */
    int updatePartnerSyncInfo(@Param("customerSysid") Long customerSysid,
                              @Param("oppositeId") String oppositeId,
                              @Param("syncStatus") String syncStatus,
                              @Param("syncTime") LocalDateTime syncTime,
                              @Param("syncMessage") String syncMessage,
                              @Param("updateBy") String updateBy,
                              @Param("updateTime") LocalDateTime updateTime);
}
