"use strict";
/**
 * AI 任务相关工具函数
 * @description 统一处理 AI 字段生成任务的目标行获取逻辑
 */
Object.defineProperty(exports, "__esModule", { value: true });
exports.getTargetRows = getTargetRows;
exports.extractDataRowsFromTable = extractDataRowsFromTable;
exports.shouldExecuteAiTask = shouldExecuteAiTask;
/**
 * 获取 AI 任务的目标行
 *
 * @description
 * 根据保存模式和数据源获取需要执行 AI 任务的目标行：
 * - config-only: 返回空数组（仅保存配置，不执行任务）
 * - first-5-rows: 返回页面显示的前5行数据
 * - all-rows: 返回所有可见数据行
 *
 * 数据源优先级：
 * 1. dataModel.getDisplayOrderData(viewId)（推荐，自动获取分组/筛选后的显示顺序）
 * 2. customRows（分组视图，已按显示顺序排列）
 * 3. table.getRowModel().rows（从 TanStack Table 获取）
 * 4. viewData（筛选后的数据，作为回退）
 *
 * @param options - 配置选项
 * @returns 目标行数据数组
 */
function getTargetRows(options) {
    var _a, _b;
    const { mode, dataModel, viewId, viewData = [], customRows, table } = options;
    // 仅保存配置模式，不需要执行任务
    if (mode === 'config-only') {
        return [];
    }
    let displayOrderRows;
    // 优先级 1: 使用 dataModel.getDisplayOrderData（推荐，自动获取分组/筛选后的显示顺序）
    if (dataModel && viewId && typeof dataModel.getDisplayOrderData === 'function') {
        displayOrderRows = dataModel.getDisplayOrderData(viewId) || [];
    }
    // 优先级 2: 使用 customRows（分组视图传入，已按显示顺序排列）
    else if (customRows && customRows.length > 0) {
        displayOrderRows = customRows
            .filter((item) => { var _a; return item.type === 'data' && ((_a = item.row) === null || _a === void 0 ? void 0 : _a.original); })
            .map((item) => item.row.original);
    }
    // 优先级 3: 使用 table 实例获取显示顺序的行
    else if (table) {
        const tableRows = ((_b = (_a = table.getRowModel) === null || _a === void 0 ? void 0 : _a.call(table)) === null || _b === void 0 ? void 0 : _b.rows) || [];
        displayOrderRows = extractDataRowsFromTable(tableRows);
    }
    // 优先级 4: 使用 viewData（筛选后的数据，作为回退）
    else {
        displayOrderRows = viewData;
    }
    // 根据模式返回目标行
    if (mode === 'first-5-rows') {
        return displayOrderRows.slice(0, 5);
    }
    return displayOrderRows;
}
/**
 * 从 TanStack Table 行中递归提取数据行
 *
 * @description
 * 递归遍历表格行，跳过分组行，提取数据行的原始数据
 * 保持页面显示顺序
 *
 * @param tableRows - TanStack Table 的行数组
 * @returns 数据行原始数据数组
 */
function extractDataRowsFromTable(tableRows) {
    const dataRows = [];
    const traverse = (rows) => {
        for (const row of rows) {
            // 检查是否为分组行
            if (row.getIsGrouped && row.getIsGrouped()) {
                // 分组行：递归处理子行
                if (row.subRows && row.subRows.length > 0) {
                    traverse(row.subRows);
                }
            }
            else if (row.original) {
                // 数据行：添加原始数据
                dataRows.push(row.original);
            }
        }
    };
    traverse(tableRows);
    return dataRows;
}
/**
 * 检查是否需要执行 AI 任务
 *
 * @param mode - 保存模式
 * @returns 是否需要执行任务
 */
function shouldExecuteAiTask(mode) {
    return mode === 'first-5-rows' || mode === 'all-rows';
}
