package com.njcn.gather.tool.adddata.pojo.bo;

import lombok.Getter;

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

/**
 * 数据补录表定义。
 */
@Getter
public class AddDataTableDefinition {

    /** 分表时间轴类型。 */
    public enum TimeAxisType {
        /** 使用前端传入步长。 */
        REQUEST_INTERVAL,
        /** 固定 10 分钟。 */
        FIXED_TEN_MINUTES,
        /** 固定 2 小时。 */
        FIXED_TWO_HOURS
    }

    /** 表名。 */
    private final String tableName;

    /** 字段列表，顺序与落库 SQL 保持一致。 */
    private final List<String> columns;

    /** 首版实际落库相别集合。 */
    private final List<String> phaseCodes;

    /** 单批写入大小。 */
    private final int batchSize;

    /** 时间轴类型。 */
    private final TimeAxisType timeAxisType;

    public AddDataTableDefinition(String tableName, List<String> columns, List<String> phaseCodes,
                                  int batchSize, TimeAxisType timeAxisType) {
        this.tableName = tableName;
        this.columns = Collections.unmodifiableList(new ArrayList<String>(columns));
        this.phaseCodes = Collections.unmodifiableList(new ArrayList<String>(phaseCodes));
        this.batchSize = batchSize;
        this.timeAxisType = timeAxisType;
    }

    /**
     * 解析当前表真实使用的时间步长。
     *
     * @param requestIntervalMinutes 前端传入步长
     * @return 当前表步长
     */
    public int resolveIntervalMinutes(int requestIntervalMinutes) {
        if (TimeAxisType.FIXED_TEN_MINUTES.equals(timeAxisType)) {
            return 10;
        }
        if (TimeAxisType.FIXED_TWO_HOURS.equals(timeAxisType)) {
            return 120;
        }
        return requestIntervalMinutes;
    }
}
