package xyz.wbsite.dbtool.javafx.po;

public enum FieldType {
    Boolean(0),//布尔
    Byte(0),//字节
    Bytes(0),//字节数组
    Character(0),//字符
    Short(0),//短整数
    Integer(0),//整数
    Long(0),//长整数
    Float(0),//浮点数
    Double(0),//
    Date(0),//日期时间
    BigDecimal(0),//高精度
    Dict(20),//字典
    String_1(1),//字符1
    String_10(10),//字符10
    String_var(20, false),//字符20
    String_var50(50),//字符50
    String_var100(100),//字符100
    String_var255(255),//字符255
    String_var500(500),//字符500
    String_var2500(2500),//字符2500
    String_var4000(4000),//字符4000
    String_super(0);//大字符

    private int defaultLength;
    private boolean fix = true;

    public boolean isFix() {
        return fix;
    }

    public int getDefaultLength() {
        return defaultLength;
    }

    public void setDefaultLength(int defaultLength) {
        this.defaultLength = defaultLength;
    }

    FieldType(int defaultLength) {
        this.defaultLength = defaultLength;
    }

    FieldType(int defaultLength, boolean fix) {
        this.defaultLength = defaultLength;
        this.fix = fix;
    }

    public static FieldType parse(String str) {
        if (str == null) {
            return null;
        }
        FieldType fieldType = null;
        try {
            fieldType = FieldType.valueOf(str);
        } catch (IllegalArgumentException e) {
            tryGetsimilar(str, 0);
        }
        if (fieldType == null) {
            return FieldType.String_var50;
        }
        return fieldType;
    }

    public static FieldType parse(String str, int length) {
        if (str == null) {
            return null;
        }
        FieldType fieldType = null;
        try {
            fieldType = FieldType.valueOf(str);
        } catch (IllegalArgumentException e) {
            fieldType = tryGetsimilar(str, length);
        }
        if (fieldType == null) {
            return FieldType.String_var50;
        }
        return fieldType;
    }

    public static FieldType tryGetsimilar(String str, int length) {
        if (str.contains("CHAR")) {
            return FieldType.String_var50;
        } else if (str.contains("NUMBER")) {

        } else if (str.contains("DATE")) {
            return FieldType.Date;
        } else if (str.contains("BLOB")) {
            return FieldType.Bytes;
        }
        return null;
    }

    @Override
    public String toString() {
        if (Boolean.name().equals(this.name())) {
            return "Boolean";
        } else if (Byte.name().equals(this.name())) {
            return "Byte";
        } else if (Bytes.name().equals(this.name())) {
            return "Byte[]";
        } else if (Character.name().equals(this.name())) {
            return "Character";
        } else if (Short.name().equals(this.name())) {
            return "Short";
        } else if (Integer.name().equals(this.name())) {
            return "Integer";
        } else if (Long.name().equals(this.name())) {
            return "Long";
        } else if (Float.name().equals(this.name())) {
            return "Float";
        } else if (Double.name().equals(this.name())) {
            return "Double";
        } else if (Date.name().equals(this.name())) {
            return "Date";
        } else if (BigDecimal.name().equals(this.name())) {
            return "BigDecimal";
        } else if (Dict.name().equals(this.name())) {
            return "Dict";
        } else if (String_1.name().equals(this.name())) {
            return "String_1";
        } else if (String_10.name().equals(this.name())) {
            return "String_10";
        } else if (String_var.name().equals(this.name())) {
            return "String_var";
        } else if (String_var50.name().equals(this.name())) {
            return "String_var50";
        } else if (String_var100.name().equals(this.name())) {
            return "String_var100";
        } else if (String_var255.name().equals(this.name())) {
            return "String_var255";
        } else if (String_var500.name().equals(this.name())) {
            return "String_var500";
        } else if (String_var2500.name().equals(this.name())) {
            return "String_var2500";
        } else if (String_var4000.name().equals(this.name())) {
            return "String_var4000";
        } else if (String_super.name().equals(this.name())) {
            return "String_super";
        } else {
            return "";
        }
    }

    public String javaType() {
        if (Boolean.name().equals(this.name())) {
            return "Boolean";
        } else if (Byte.name().equals(this.name())) {
            return "Byte";
        } else if (Bytes.name().equals(this.name())) {
            return "Byte[]";
        } else if (Character.name().equals(this.name())) {
            return "Character";
        } else if (Short.name().equals(this.name())) {
            return "Short";
        } else if (Integer.name().equals(this.name())) {
            return "Integer";
        } else if (Long.name().equals(this.name())) {
            return "Long";
        } else if (Float.name().equals(this.name())) {
            return "Float";
        } else if (Double.name().equals(this.name())) {
            return "Double";
        } else if (Date.name().equals(this.name())) {
            return "Date";
        } else if (BigDecimal.name().equals(this.name())) {
            return "BigDecimal";
        } else if (Dict.name().equals(this.name())) {
            return "String";
        } else if (String_1.name().equals(this.name())) {
            return "String";
        } else if (String_10.name().equals(this.name())) {
            return "String";
        } else if (String_var.name().equals(this.name())) {
            return "String";
        } else if (String_var50.name().equals(this.name())) {
            return "String";
        } else if (String_var100.name().equals(this.name())) {
            return "String";
        } else if (String_var255.name().equals(this.name())) {
            return "String";
        } else if (String_var500.name().equals(this.name())) {
            return "String";
        } else if (String_var2500.name().equals(this.name())) {
            return "String";
        } else if (String_var4000.name().equals(this.name())) {
            return "String";
        } else if (String_super.name().equals(this.name())) {
            return "String";
        } else {
            return "";
        }
    }

    public String jdbcType() {
        if (Boolean.name().equals(this.name())) {
            return "BIT";
        } else if (Byte.name().equals(this.name())) {
            return "TINYINT";
        } else if (Bytes.name().equals(this.name())) {
            return "BINARY";
        } else if (Character.name().equals(this.name())) {
            return "CHAR";
        } else if (Short.name().equals(this.name())) {
            return "SMALLINT";
        } else if (Integer.name().equals(this.name())) {
            return "INTEGER";
        } else if (Long.name().equals(this.name())) {
            return "BIGINT";
        } else if (Float.name().equals(this.name())) {
            return "FLOAT";
        } else if (Double.name().equals(this.name())) {
            return "DOUBLE";
        } else if (Date.name().equals(this.name())) {
            return "TIMESTAMP";
        } else if (BigDecimal.name().equals(this.name())) {
            return "NUMERIC";
        } else if (Dict.name().equals(this.name())) {
            return "VARCHAR";
        } else if (String_1.name().equals(this.name())) {
            return "CHAR";
        } else if (String_10.name().equals(this.name())) {
            return "CHAR";
        } else if (String_var.name().equals(this.name())) {
            return "VARCHAR";
        } else if (String_var50.name().equals(this.name())) {
            return "VARCHAR";
        } else if (String_var100.name().equals(this.name())) {
            return "VARCHAR";
        } else if (String_var255.name().equals(this.name())) {
            return "VARCHAR";
        } else if (String_var500.name().equals(this.name())) {
            return "VARCHAR";
        } else if (String_var2500.name().equals(this.name())) {
            return "VARCHAR";
        } else if (String_var4000.name().equals(this.name())) {
            return "VARCHAR";
        } else if (String_super.name().equals(this.name())) {
            return "VARCHAR";
        } else {
            return "";
        }
    }
}
