package com.ruoyi.system.mapper.fieldchangerecord;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.ruoyi.system.domain.fieldchangerecord.vo.FieldChangeAffectedHouseResourceVO;
import com.ruoyi.system.domain.fieldchangerecord.vo.FieldChangeRecordQuery;
import com.ruoyi.system.domain.fieldchangerecord.vo.FieldChangeRecordVO;
import com.ruoyi.system.domain.fieldchangerecord.vo.FieldChangeSummaryRow;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 字段级变更查询 Mapper。
 *
 * <p>和 {@link DataFieldChangeRecordMapper}（只负责 batchInsert）分开，职责清晰：
 * 写入用拦截器走 batchInsert；读取由此 Mapper 承担，包含 HR 侧、BE 侧、
 * 涉及房源侧的查询路径。</p>
 */
public interface DataFieldChangeRecordQueryMapper {

    /** HR 侧明细，分页。走 data_field_change_record JOIN house_resource。 */
    IPage<FieldChangeRecordVO> selectHouseResourceFieldChanges(
            IPage<FieldChangeRecordVO> page,
            @Param("query") FieldChangeRecordQuery query);

    /** HR 侧汇总，按 (fieldCode, operationType) 分组。 */
    List<FieldChangeSummaryRow> selectHouseResourceFieldChangeSummary(
            @Param("query") FieldChangeRecordQuery query);

    /** BE 侧明细，分页。走 data_field_change_record JOIN bei + mapping + hr。 */
    IPage<FieldChangeRecordVO> selectBusinessEntityFieldChanges(
            IPage<FieldChangeRecordVO> page,
            @Param("query") FieldChangeRecordQuery query);

    /** BE 侧汇总。为避免 JOIN 膨胀，对日志 id 做 distinct 计数。 */
    List<FieldChangeSummaryRow> selectBusinessEntityFieldChangeSummary(
            @Param("query") FieldChangeRecordQuery query);

    /** 字段变更涉及房源分页。HR 直接取房源，BE 通过 mapping 找房源，最终按房源去重。 */
    IPage<FieldChangeAffectedHouseResourceVO> selectAffectedHouseResources(
            IPage<FieldChangeAffectedHouseResourceVO> page,
            @Param("query") FieldChangeRecordQuery query);

    /** 字段变更涉及房源汇总。按 operationType 统计去重房源数。 */
    List<FieldChangeSummaryRow> selectAffectedHouseResourceSummary(
            @Param("query") FieldChangeRecordQuery query);
}
