package tech.easyflow.datacenter.execution.service;

import com.alibaba.fastjson2.JSONObject;
import tech.easyflow.common.entity.LoginAccount;
import tech.easyflow.datacenter.execution.model.DatasetRef;

import java.math.BigInteger;
import java.util.List;

public interface DatacenterDatasetWriteService {

    /**
     * 保存单行数据。
     *
     * @param datasetRef 数据集引用
     * @param data 待保存数据
     * @param account 当前操作账号
     */
    void saveRow(DatasetRef datasetRef, JSONObject data, LoginAccount account);

    /**
     * 批量保存数据集行。
     *
     * @param datasetRef 数据集引用
     * @param rows 待保存数据行
     * @param account 当前操作账号
     * @param batchSize 单批最大行数
     */
    void saveRows(DatasetRef datasetRef, List<JSONObject> rows, LoginAccount account, int batchSize);

    /**
     * 使用稳定幂等键批量保存数据集行。
     *
     * @param datasetRef 数据集引用
     * @param rows 待保存数据行
     * @param account 当前操作账号
     * @param batchSize 单批最大行数
     * @param idempotencyKey 稳定业务幂等键；为空时保持普通写入语义
     * @return 本次实际执行写入时为 {@code true}，已有成功记录时为 {@code false}
     */
    default boolean saveRowsIdempotently(DatasetRef datasetRef,
                                         List<JSONObject> rows,
                                         LoginAccount account,
                                         int batchSize,
                                         String idempotencyKey) {
        saveRows(datasetRef, rows, account, batchSize);
        return true;
    }

    /**
     * 删除单行数据。
     *
     * @param datasetRef 数据集引用
     * @param id 数据主键
     * @param account 当前操作账号
     */
    void deleteRow(DatasetRef datasetRef, BigInteger id, LoginAccount account);
}
