package com.yanzuoguang.util.helper;

import com.yanzuoguang.util.YzgError;
import com.yanzuoguang.util.exception.CodeException;

public class AreaHelper {
    public static final int COUNTRY_LENGTH = 3;
    public static final int PROVINCE_LENGTH = 5;
    public static final int CITY_LENGTH = 7;
    public static final int AREA_LENGTH = 9;

    /**
     * 获取地区Id
     *
     * @param fromAreaId
     * @return
     */
    public static String getCountryId(String fromAreaId) {
        return getLengthId(fromAreaId, COUNTRY_LENGTH);
    }

    /**
     * 获取地区Id
     *
     * @param fromAreaId
     * @return
     */
    public static String getProvinceId(String fromAreaId) {
        return getLengthId(fromAreaId, PROVINCE_LENGTH);
    }

    /**
     * 获取地区Id
     *
     * @param fromAreaId
     * @return
     */
    public static String getCityId(String fromAreaId) {
        return getLengthId(fromAreaId, CITY_LENGTH);
    }

    /**
     * 获取地区Id
     *
     * @param fromAreaId
     * @return
     */
    public static String getAreaId(String fromAreaId) {
        return getLengthId(fromAreaId, AREA_LENGTH);
    }

    private static String getLengthId(String fromAreaId, int length) {
        if (StringHelper.isEmpty(fromAreaId)) {
            return fromAreaId;
        } else if (fromAreaId.length() != AREA_LENGTH) {
            throw YzgError.getRuntimeException("050");
        }
        // 获取国家
        String country = fromAreaId.substring(0, 3);
        // 获取城市
        String city = fromAreaId.substring(3);

        String ret = city.substring(0, length - 3);
        String retSimple = getSimple(ret, false);
        if (StringHelper.compare(ret, retSimple)) {
            return getFull(country + retSimple);
        }
        return StringHelper.EMPTY;
    }

    /**
     * 获取简写Id
     *
     * @param fromAreaId
     * @return
     */
    public static String getSimple(String fromAreaId) {
        return getSimple(fromAreaId, true);
    }

    /**
     * 获取简写Id
     *
     * @param fromAreaId
     * @return
     */
    public static String getSimple(String fromAreaId, boolean isFull) {
        if (StringHelper.isEmpty(fromAreaId) || fromAreaId.length() <= 3) {
            return fromAreaId;
        }
        String to = StringHelper.trimEnd(fromAreaId, "00");
        if (to.length() < COUNTRY_LENGTH && isFull) {
            to = getFull(to).substring(0, COUNTRY_LENGTH);
        }
        return to;
    }

    /**
     * 获取全写Id
     *
     * @param fromAreaId
     * @return
     */
    public static String getFull(String fromAreaId) {
        if (StringHelper.isEmpty(fromAreaId)) {
            return fromAreaId;
        } else if (fromAreaId.length() > AREA_LENGTH) {
            throw YzgError.getRuntimeException("051");
        } else {
            StringBuilder sb = new StringBuilder();
            sb.append(fromAreaId);
            for (int i = fromAreaId.length(); i < AREA_LENGTH; i++) {
                sb.append("0");
            }
            return sb.toString();
        }
    }

    /**
     * 获取上级目录Id
     *
     * @param fromAreaId
     * @return
     */
    public static String getParentId(String fromAreaId) {
        if (StringHelper.isEmpty(fromAreaId)) {
            return fromAreaId;
        }
        String simpleId = getSimple(fromAreaId, true);
        String parentSimpleId = StringHelper.EMPTY;
        if (simpleId.length() > COUNTRY_LENGTH) {
            parentSimpleId = simpleId.substring(0, simpleId.length() - 2);
        }
        return getFull(parentSimpleId);
    }
}