package link.at17.mid.tushare.enums;

import org.springframework.util.Assert;

import lombok.Getter;

/**
 * 开盘啦 特殊指标
 * @author Barry
 *
 */
public enum KaipanlaIndexType {

    /**
     * 对倒金额
     */
    EXCHANGE_AMOUNT("GetDuiDaoKLine", "DDJE", "exchange_amount"),
    /**
     * 竞价成交量
     */
    BID_VOL("GetBidVolKLine", "Vol", "bid_vol"),
    /**
     * 压单托单
     */
    HOLD_PRESS_AMOUNT("GetTuoYaDanKLine", "TDJE", "YDJE", "hold_amount", "press_amount"),
    /**
     * 资金净额（大单净额，大于 30 万的成交单）
     */
    BIG_AMOUNT("GetDaDanKLine2New", "DDJE", "big_amount");
    /**
     * 指标类型，数据库对应字段名
     */
    @Getter
    private String[] fieldsName;
    /**
     * 别名，请求返回字段名
     */
    @Getter
    private String[] alias;
    /**
     * 接口 action 名称
     */
    @Getter String actionName;
    
    /**
     * 初始化开盘啦指标
     * @param actionName 请求名称，即指标对应请求的名称
     * @param args 参数，填写格式为：请求返回字段1 请求返回字段2 ... 请求返回字段n 数据库对应字段1 数据库对应字段2 ... 数据库对应字段n
     */
    private KaipanlaIndexType( 
            String actionName,
            String...args
            ) {
        this.actionName = actionName;
        Assert.isTrue(args != null && args.length % 2 == 0, "参数错误，参数数目必须为 2 的倍数");
        int half = args.length / 2;
        this.alias = new String[half];
        this.fieldsName = new String[half];
        for (int i = 0; i < half; i++) {
            alias[i] = args[i];
            fieldsName[i] = args[i + half];
        }
    }
    
    private KaipanlaIndexType( 
            String actionName,
            String[] alias, 
            String[] fieldsName
            ) {
        this.actionName = actionName;
        this.alias = alias;
        this.fieldsName = fieldsName;
    }
}
