package cc.smtweb.system.bpm.util;

import org.apache.commons.lang3.StringUtils;

public class CodeGenUtil {
    private CodeGenUtil() {
    }

    /***
     * 下划线命名转为驼峰命名
     *
     * @param para
     *        下划线命名的字符串
     */
    public static String underlineToHump(String para) {
        StringBuilder result = new StringBuilder();
        String[] a = para.split("_");
        for (String s : a) {
            if (result.length() == 0) {
                result.append(s.toLowerCase());
            } else {
                result.append(s.substring(0, 1).toUpperCase());
                result.append(s.substring(1).toLowerCase());
            }
        }
        return result.toString();
    }

    /***
     * 下划线命名转为大写驼峰命名
     *   大驼峰式命名法(upper camel case)
     *
     * @param para
     *        下划线命名的字符串
     */
    public static String underlineToUpperHump(String para) {
        StringBuilder result = new StringBuilder();
        String[] a = para.split("_");
        for (String s : a) {
            result.append(s.substring(0, 1).toUpperCase());
            result.append(s.substring(1).toLowerCase());
        }
        return result.toString();
    }

    /***
     * 驼峰命名转为下划线命名
     *
     * @param para
     *        驼峰命名的字符串
     */
    public static String humpToUnderline(String para) {
        return humpTo(para, "_");
    }

    private static String humpTo(String para, String splitChar) {
        StringBuilder sb = new StringBuilder(para);
        //偏移量，第i个下划线的位置是 当前的位置+ 偏移量（i-1）,第一个下划线偏移量是0
        int temp = 0;
        for (int i = 0; i < para.length(); i++) {
            if (Character.isUpperCase(para.charAt(i))) {
                sb.insert(i + temp, splitChar);
                temp += 1;
            }
        }
        return sb.toString().toLowerCase();
    }

    /***
     * 驼峰命名转为横线线命名
     *
     * @param para
     *        驼峰命名的字符串
     */
    public static String humpToDash(String para) {
        return humpTo(para, "-");
    }

    /**
     * 大驼峰转小驼峰
     */
    public static String toLowerHump(String name) {
        if (StringUtils.isNotBlank(name)) {
            return Character.toLowerCase(name.charAt(0)) + name.substring(1);
        }

        return "";
    }

    /**
     * 小驼峰转大驼峰
     */
    public static String toUpperHump(String name) {
        if (StringUtils.isNotBlank(name)) {
            return Character.toUpperCase(name.charAt(0)) + name.substring(1);
        }

        return "";
    }

    public static String getBeanName(String tableName) {
        StringBuilder result = new StringBuilder();
        String[] a = tableName.split("_");
        for (int i = 1, len = a.length; i < len; i++) {
            String s = a[i];
            result.append(s.substring(0, 1).toUpperCase());
            result.append(s.substring(1).toLowerCase());
        }
        return result.toString();
    }
}
