package com.mortals.xhx.base.system.gentable.model;

import java.util.Date;
import java.util.List;

import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.annotation.JSONField;
import com.mortals.framework.model.BaseEntityLong;
import com.mortals.xhx.common.utils.StringUtils;

/**
 * Description:GentableColumn
 * date: 2021-9-29 18:10:02
 */
public class GentableColumnEntity extends GentableColumnEntityExt {
    private static final long serialVersionUID = 1632910202558L;


    /**
     * 所属表编号
     */
    private Long tableId;

    /**
     * 列名称
     */
    private String columnName;

    /**
     * 列描述
     */
    private String columnComment;

    /**
     * 列类型
     */
    private String columnType;

    /**
     * JAVA类型
     */
    private String javaType;

    /**
     * JAVA字段名
     */
    private String javaField;

    /**
     * 是否primaryKey（0否，1 是）
     */
    private Integer isPrimaryKey;

    /**
     * 是否自增（0否，1 是）
     */
    private Integer isIncrement;

    /**
     * 是否必填（0否，1 是）
     */
    private Integer isRequired;

    /**
     * 是否为插入字段（0否，1 是）
     */
    private Integer isInsert;

    /**
     * 是否编辑字段（0否，1 是）
     */
    private Integer isEdit;

    /**
     * 是否列表字段（0否，1 是）
     */
    private Integer isList;

    /**
     * 是否查询字段（0否，1 是）
     */
    private Integer isQuery;

    /**
     * 是否导入导出字段（0否，1 是）
     */
    private Integer isExport;

    /**
     * 显示类型（1.文本框、2.文本域、3.下拉框、4.复选框、5.单选框、6.日期控件）
     */
    private Integer htmlType;

    /**
     * 查询方式（等于、不等于、大于、小于、范围）
     */
    private String queryType;

    /**
     * 默认值
     */
    private String defaultValue;

    /**
     * 排序
     */
    private Integer sort;

    /**
     * 变更时间
     */
    private Date updateTime;

    /**
     * 变更用户loginName
     */
    private String updateUser;

    /**
     * 创建时间
     */
    private Date createTime;

    /**
     * 创建用户loginName
     */
    private String createUser;

    /**
     * 序列化字段（0.启用，1 .禁用）
     */
    private Integer isSerialize;

    public Integer getIsSerialize() {
        return isSerialize;
    }

    public void setIsSerialize(Integer isSerialize) {
        this.isSerialize = isSerialize;
    }

    public GentableColumnEntity() {

    }

    /**
     * 获取 所属表编号
     *
     * @return tableId
     */
    public Long getTableId() {
        return this.tableId;
    }

    /**
     * 设置 所属表编号
     *
     * @param tableId
     */
    public void setTableId(Long tableId) {
        this.tableId = tableId;
    }

    /**
     * 获取 列名称
     *
     * @return columnName
     */
    public String getColumnName() {
        return this.columnName;
    }

    /**
     * 设置 列名称
     *
     * @param columnName
     */
    public void setColumnName(String columnName) {
        this.columnName = columnName;
    }

    /**
     * 获取 列描述
     *
     * @return columnComment
     */
    public String getColumnComment() {
        return this.columnComment;
    }

    /**
     * 设置 列描述
     *
     * @param columnComment
     */
    public void setColumnComment(String columnComment) {
        this.columnComment = columnComment;
    }

    /**
     * 获取 列类型
     *
     * @return columnType
     */
    public String getColumnType() {
        return this.columnType;
    }

    /**
     * 设置 列类型
     *
     * @param columnType
     */
    public void setColumnType(String columnType) {
        this.columnType = columnType;
    }

    /**
     * 获取 JAVA类型
     *
     * @return javaType
     */
    public String getJavaType() {
        return this.javaType;
    }

    /**
     * 设置 JAVA类型
     *
     * @param javaType
     */
    public void setJavaType(String javaType) {
        this.javaType = javaType;
    }

    /**
     * 获取 JAVA字段名
     *
     * @return javaField
     */
    public String getJavaField() {
        return this.javaField;
    }

    /**
     * 设置 JAVA字段名
     *
     * @param javaField
     */
    public void setJavaField(String javaField) {
        this.javaField = javaField;
    }

    /**
     * 获取 是否primaryKey（0否，1 是）
     *
     * @return isPrimaryKey
     */
    public Integer getIsPrimaryKey() {
        return this.isPrimaryKey;
    }

    /**
     * 设置 是否primaryKey（0否，1 是）
     *
     * @param isPrimaryKey
     */
    public void setIsPrimaryKey(Integer isPrimaryKey) {
        this.isPrimaryKey = isPrimaryKey;
    }

    /**
     * 获取 是否自增（0否，1 是）
     *
     * @return isIncrement
     */
    public Integer getIsIncrement() {
        return this.isIncrement;
    }

    /**
     * 设置 是否自增（0否，1 是）
     *
     * @param isIncrement
     */
    public void setIsIncrement(Integer isIncrement) {
        this.isIncrement = isIncrement;
    }

    /**
     * 获取 是否必填（0否，1 是）
     *
     * @return isRequired
     */
    public Integer getIsRequired() {
        return this.isRequired;
    }

    /**
     * 设置 是否必填（0否，1 是）
     *
     * @param isRequired
     */
    public void setIsRequired(Integer isRequired) {
        this.isRequired = isRequired;
    }

    /**
     * 获取 是否为插入字段（0否，1 是）
     *
     * @return isInsert
     */
    public Integer getIsInsert() {
        return this.isInsert;
    }

    /**
     * 设置 是否为插入字段（0否，1 是）
     *
     * @param isInsert
     */
    public void setIsInsert(Integer isInsert) {
        this.isInsert = isInsert;
    }

    /**
     * 获取 是否编辑字段（0否，1 是）
     *
     * @return isEdit
     */
    public Integer getIsEdit() {
        return this.isEdit;
    }

    /**
     * 设置 是否编辑字段（0否，1 是）
     *
     * @param isEdit
     */
    public void setIsEdit(Integer isEdit) {
        this.isEdit = isEdit;
    }

    /**
     * 获取 是否列表字段（0否，1 是）
     *
     * @return isList
     */
    public Integer getIsList() {
        return this.isList;
    }

    /**
     * 设置 是否列表字段（0否，1 是）
     *
     * @param isList
     */
    public void setIsList(Integer isList) {
        this.isList = isList;
    }

    /**
     * 获取 是否查询字段（0否，1 是）
     *
     * @return isQuery
     */
    public Integer getIsQuery() {
        return this.isQuery;
    }

    /**
     * 设置 是否查询字段（0否，1 是）
     *
     * @param isQuery
     */
    public void setIsQuery(Integer isQuery) {
        this.isQuery = isQuery;
    }

    /**
     * 获取 是否导入导出字段（0否，1 是）
     *
     * @return isExport
     */
    public Integer getIsExport() {
        return this.isExport;
    }

    /**
     * 设置 是否导入导出字段（0否，1 是）
     *
     * @param isExport
     */
    public void setIsExport(Integer isExport) {
        this.isExport = isExport;
    }

    /**
     * 获取 显示类型（1.文本框、2.文本域、3.下拉框、4.复选框、5.单选框、6.日期控件）
     *
     * @return htmlType
     */
    public Integer getHtmlType() {
        return this.htmlType;
    }

    /**
     * 设置 显示类型（1.文本框、2.文本域、3.下拉框、4.复选框、5.单选框、6.日期控件）
     *
     * @param htmlType
     */
    public void setHtmlType(Integer htmlType) {
        this.htmlType = htmlType;
    }

    /**
     * 获取 查询方式（等于、不等于、大于、小于、范围）
     *
     * @return queryType
     */
    public String getQueryType() {
        return this.queryType;
    }

    /**
     * 设置 查询方式（等于、不等于、大于、小于、范围）
     *
     * @param queryType
     */
    public void setQueryType(String queryType) {
        this.queryType = queryType;
    }

    /**
     * 获取 默认值
     *
     * @return defaultValue
     */
    public String getDefaultValue() {
        return this.defaultValue;
    }

    /**
     * 设置 默认值
     *
     * @param defaultValue
     */
    public void setDefaultValue(String defaultValue) {
        this.defaultValue = defaultValue;
    }

    /**
     * 获取 排序
     *
     * @return sort
     */
    public Integer getSort() {
        return this.sort;
    }

    /**
     * 设置 排序
     *
     * @param sort
     */
    public void setSort(Integer sort) {
        this.sort = sort;
    }

    /**
     * 获取 变更时间
     *
     * @return updateTime
     */
    public Date getUpdateTime() {
        return this.updateTime;
    }

    /**
     * 设置 变更时间
     *
     * @param updateTime
     */
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }

    /**
     * 获取 变更用户loginName
     *
     * @return updateUser
     */
    public String getUpdateUser() {
        return this.updateUser;
    }

    /**
     * 设置 变更用户loginName
     *
     * @param updateUser
     */
    public void setUpdateUser(String updateUser) {
        this.updateUser = updateUser;
    }

    /**
     * 获取 创建时间
     *
     * @return createTime
     */
    public Date getCreateTime() {
        return this.createTime;
    }

    /**
     * 设置 创建时间
     *
     * @param createTime
     */
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    /**
     * 获取 创建用户loginName
     *
     * @return createUser
     */
    public String getCreateUser() {
        return this.createUser;
    }

    /**
     * 设置 创建用户loginName
     *
     * @param createUser
     */
    public void setCreateUser(String createUser) {
        this.createUser = createUser;
    }

    public boolean isSuperColumn() {
        return isSuperColumn(this.javaField);
    }

    public static boolean isSuperColumn(String javaField) {
        return StringUtils.equalsAnyIgnoreCase(javaField,
                // BaseEntity
                "id", "createUser", "createTime", "updateUser",
                "updateTime", "createUserId", "updateUserId");
                // TreeEntity
               // "parentName", "parentId", "orderNum", "ancestors");
    }

    @Override
    public int hashCode() {
        return this.getId().hashCode();
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null)
            return false;
        if (obj instanceof GentableColumnEntity) {
            GentableColumnEntity tmp = (GentableColumnEntity) obj;
            if (this.getId().longValue() == tmp.getId().longValue()) {
                return true;
            }
        }
        return false;
    }

    public String toString() {
        StringBuilder sb = new StringBuilder("");
        sb
                .append(",id:").append(getId())
                .append(",tableId:").append(getTableId())
                .append(",columnName:").append(getColumnName())
                .append(",columnComment:").append(getColumnComment())
                .append(",columnType:").append(getColumnType())
                .append(",javaType:").append(getJavaType())
                .append(",javaField:").append(getJavaField())
                .append(",isPrimaryKey:").append(getIsPrimaryKey())
                .append(",isIncrement:").append(getIsIncrement())
                .append(",isRequired:").append(getIsRequired())
                .append(",isInsert:").append(getIsInsert())
                .append(",isEdit:").append(getIsEdit())
                .append(",isList:").append(getIsList())
                .append(",isQuery:").append(getIsQuery())
                .append(",htmlType:").append(getHtmlType())
                .append(",defaultValue:").append(getDefaultValue())
                .append(",sort:").append(getSort())
                .append(",updateTime:").append(getUpdateTime())
                .append(",updateUser:").append(getUpdateUser())
                .append(",createTime:").append(getCreateTime())
                .append(",createUser:").append(getCreateUser())
        ;
        return sb.toString();
    }

    public String readConverterExp() {
        try {
            String remarks = StringUtils.substringBetween(this.columnComment, "（", "）");
            if (StringUtils.isEmpty(remarks)) {
                remarks = StringUtils.substringBetween(this.columnComment, "(", ")");
            }
            StringBuffer sb = new StringBuffer();
            if (StringUtils.isNotEmpty(remarks)) {
                // 可能的分隔符列表
                String[] possibleDelimiters = { ",", "，" };
                // 尝试不同的分隔符进行拆分
                for (String delimiter : possibleDelimiters) {
                    List<String> result = StrUtil.split(remarks, delimiter);
                    if (result.size() > 1) {
                        System.out.println("使用分隔符 '" + delimiter + "' 拆分后的结果：");
                        for (String value : result) {
                            int point = value.indexOf(".");
                            if (point != -1) {
                                Object startStr = value.subSequence(0, point);
                                String endStr = value.substring(point + 1);
                                sb.append("").append(startStr).append("=").append(endStr).append(",");
                            }

                        }
                        break;
                    }
                }
/*
                for (String value : remarks.split("，")) {
                    if (StringUtils.isNotEmpty(value)) {
                        int point = value.indexOf(".");
                        if (point != -1) {
                            Object startStr = value.subSequence(0, point);
                            String endStr = value.substring(point + 1);
                            sb.append("").append(startStr).append("=").append(endStr).append(",");
                        }
                    }
                }*/
                return sb.deleteCharAt(sb.length() - 1).toString();
            } else {
                return this.columnComment;
            }
        } catch (Exception e) {
            return this.columnComment;
        }
    }


    public static void main(String[] args) {
        String str = "材料形式(1.纸质，2.电子，10.纸质/电子)";
        GentableColumnEntity gentableColumnEntity = new GentableColumnEntity();
        gentableColumnEntity.setColumnComment(str);
        System.out.println(gentableColumnEntity.readConverterExp());
    }


    public void initAttrValue() {
        this.tableId = null;
        this.columnName = "1231";
        this.columnComment = "1313131";
        this.columnType = null;
        this.javaType = null;
        this.javaField = null;
        this.isPrimaryKey = 0;
        this.isIncrement = 0;
        this.isRequired = 0;
        this.isInsert = 0;
        this.isEdit = 0;
        this.isList = 0;
        this.isQuery = 0;
        this.htmlType = null;
        this.defaultValue = null;
        this.sort = null;
        this.updateTime = null;
        this.updateUser = null;
        this.createTime = null;
        this.createUser = null;
    }
}