package cn.gov.customs.wxjy.common.importtool.config;

import cn.gov.customs.wxjy.common.importtool.core.interfaces.DataProcessor;
import cn.gov.customs.wxjy.common.importtool.core.interfaces.ImportDataConverter;
import cn.gov.customs.wxjy.common.importtool.core.interfaces.ImportDataValidator;
import cn.gov.customs.wxjy.common.importtool.core.interfaces.UniqueKeyGenerator;
import lombok.Data;

import java.util.ArrayList;
import java.util.List;

@Data
public class ImportConfig<S, T> {

	private ImportDataConverter<S, T> converter;
	private ImportDataValidator<T> validator;
	private UniqueKeyGenerator<T> uniqueKeyGenerator;
	private DataProcessor<T> dataProcessor;
	private boolean skipExisting = false;
	private int batchSize = 1000;
	// 新增更新相关配置
	private List<String> updateFields = new ArrayList<>();
	private DataUpdater<T> updater;
	// 新增数据预处理器（用于拆分、合并等操作）
	private DataPreProcessor<T> dataPreProcessor;


	public static <S, T> ImportConfigBuilder<S, T> builder() {
		return new ImportConfigBuilder<>();
	}

	/**
	 * 数据更新器接口
	 */
	public interface DataUpdater<T> {
		/**
		 * 更新已存在的数据项
		 * @param existingItem 已存在的数据项
		 * @param newItem 新的数据项
		 * @return 更新后的数据项
		 */
		T update(T existingItem, T newItem);
	}
	/**
	 * 验证配置是否有效
	 */
	public void validateConfig() {
		if (converter == null) {
			throw new IllegalArgumentException("Converter is required");
		}
		if (dataProcessor == null) {
			throw new IllegalArgumentException("DataProcessor is required");
		}
		if (skipExisting && uniqueKeyGenerator == null) {
			throw new IllegalArgumentException("UniqueKeyGenerator is required when skipExisting is true");
		}
	}



	/**
	 * 数据预处理器接口
	 */
	public interface DataPreProcessor<T> {
		/**
		 * 预处理数据（拆分、合并、转换等）
		 */
		List<T> preProcess(List<T> data);

		/**
		 * 预处理已存在数据（构建查询条件等）
		 */
		default void preProcessExistingData(DataProcessor<T> processor) {
			// 默认不执行任何操作
		}
	}


}
