package com.yanzuoguang.util.sfz;

import com.yanzuoguang.util.helper.StringHelper;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.List;

/**
 * 身份证处理服务
 *
 * @author 颜佐光
 */
public class SfzService {
    /**
     * 身份证处理类
     */
    private final List<SfzHandle> handleList = new ArrayList<>();

    public SfzService(SfzHandle... sfzHandles) {
        this.handleList.addAll(Arrays.asList(sfzHandles));
    }

    /**
     * 获取已包含的处理类
     *
     * @return 已包含的处理类
     */
    public List<SfzHandle> getHandleList() {
        return handleList;
    }

    /**
     * 获取身份证信息
     *
     * @param cardId 身份证信息
     * @return 返回身份证信息
     */
    public SfzInfo getInfo(String cardId) {
        if (StringHelper.isEmpty(cardId)) {
            return null;
        }
        for (SfzHandle sfzHandle : handleList) {
            if (sfzHandle.validate(cardId)) {
                return new SfzInfo(cardId, sfzHandle);
            }
        }
        return null;
    }

    /**
     * 获取修复身份证
     *
     * @param info 信息
     * @return 返回值
     */
    public SfzInfo repair(SfzInfo info) {
        if (info == null) {
            return null;
        }
        String repair = info.getSfzHandle().repair(info.getCardId());
        return getInfo(repair);
    }

    /**
     * 获取身份证性别,当没有获取到时,返回空字符串
     *
     * @param info 身份证
     * @return 身份证对应的性别, 如:男、女
     */
    public String getGender(SfzInfo info) {
        if (info == null) {
            return StringHelper.EMPTY;
        }
        return info.getSfzHandle().getGender(info.getCardId());
    }

    /**
     * 获取身份证对应的生日,当没有获取到时,返回空字符串
     *
     * @param info 身份证
     * @return 生日
     */
    public String getBirthday(SfzInfo info) {
        if (info == null) {
            return StringHelper.EMPTY;
        }
        return info.getSfzHandle().getBirthday(info.getCardId());
    }

    /**
     * 获取国家3位编码
     *
     * @param info 身份证
     * @return 国家编号
     */
    public String getCountry(SfzInfo info) {
        if (info == null) {
            return StringHelper.EMPTY;
        }
        return info.getSfzHandle().getCountry(info.getCardId());
    }

    /**
     * 获取地区6位编码,不包含国家信息
     *
     * @param info 身份证
     * @return 地区编号
     */
    public String getAreaId(SfzInfo info) {
        if (info == null) {
            return StringHelper.EMPTY;
        }
        return info.getSfzHandle().getAreaId(info.getCardId());
    }

    /**
     * 获取省份名称
     *
     * @param info 身份证
     * @return 地区编号
     */
    public String getProvinceName(SfzInfo info) {
        if (info == null) {
            return StringHelper.EMPTY;
        }
        return info.getSfzHandle().getProvinceName(info.getCardId());
    }

}