
package com.lideeyunji.tool.framework.sql.enums;


import com.lideeyunji.tool.framework.sql.template.*;
import com.lideeyunji.tool.framework.yunji.utils.FuncBase;

import java.util.Arrays;
import java.util.Optional;


/**
 * 数据库类型
 */
public enum DbTypeEnum {

    MYSQL("mysql", "Mysql数据库", new DbMysql()),
    ORACLE("oracle", "oracle数据库", new DbOracle()),
    POSTGRESQL("postgresql", "Postgresql数据库", new DbPostgresql()),
    DM("dm dbms", "达梦数据库", new DbDm()),
    KINGBASE("kingbasees", "kingbaseES数据库", new DbKingBaseES())

    ;

    /**
     * 数据库类型
     */
    private final String dbCode;
    /**
     * 数据名称
     */
    private final String name;

    /**
     * 实现类
     */
    private final AbstractDbTemplate dbTemplate;

    public static DbTypeEnum getByDbCode(String dbCode) {

        // 使用流来查找匹配的DbProductEnum
        Optional<DbTypeEnum> matchingEnum = Arrays.stream(DbTypeEnum.values())
                .filter(dbTypeEnum -> FuncBase.equals(dbTypeEnum.getDbCode(), dbCode))
                .findFirst(); // findFirst()会返回第一个匹配的元素，或者如果找不到则返回一个空的Optional
        // 检查是否找到了匹配的枚举项
        if (matchingEnum.isPresent()) {
            return matchingEnum.get();
        }
        return null;

    }

    public String getDbCode() {
        return dbCode;
    }

    public String getName() {
        return name;
    }

    public AbstractDbTemplate getDbTemplate() {
        return dbTemplate;
    }

    DbTypeEnum(String dbCode, String name, AbstractDbTemplate dbTemplate) {
        this.dbCode = dbCode;
        this.name = name;
        this.dbTemplate = dbTemplate;
    }
}
