package com.tax.file.utils;

import java.util.Arrays;
import java.util.List;
import java.util.Map;

import com.google.common.collect.Maps;
import com.yxcheng.token.utils.StringUtil;


public class FinValidUtils {
	//老式电子发票
	public static String OLD_ELECTRONIC_INVOICE_TYPE="10";
	//电子发票
	public static String ELECTRONIC_INVOICE_TYPE="10";
	//卷式发票
	public static String ROLL_INVOICE_TYPE="11";
	//机动车发票
	public static String MOTOR_VEHICLE_INVOICE_TYPE="03";
	//增值税专用发票
	public static String VAT_SPA_INVOICE_TYPE="01";
	//增值税普通发票
	public static String VAT_INVOICE_TYPE="04";
	//增值税电子专用发票
	public static String ELECTRONIC_VAT_INVOICE_TYPE="08";
	//货物运输发票
	public static String FREIGHT_INVOICE_TYPE="02";
	//通行费发票
	public static String TOLL_INVOICE_TYPE="14";
	//二手车发票
	public static String USED_CAR_TYPE="15";
	
	public static String ERROR_TYPE="00";
	
	public static List<String>oldEleList=Arrays.asList("144031539110","131001570151","133011501118","111001571071");
	
	public static Map<String, String> errorMap = Maps.newHashMap();
	
	static {
		errorMap.put("正常", "0");
		errorMap.put("失控", "1");
		errorMap.put("作废", "2");
		errorMap.put("红冲", "3");
		errorMap.put("异常", "4");
	}
	
	public static String generateType(String code){
		if(code!=null){
			int length = code.length();
			if(oldEleList.contains(code)){
				return OLD_ELECTRONIC_INVOICE_TYPE;
			}
			if(length == 12){
				if(code.startsWith("0")){
					String suff2 = code.substring(code.length()-2);
					if("11".equals(suff2)){
						return ELECTRONIC_INVOICE_TYPE;
					}else if("06".equals(suff2) || "07".equals(suff2)){
						return ROLL_INVOICE_TYPE;
					} else if("12".equals(suff2)) {
						return TOLL_INVOICE_TYPE;
					} else if("17".equals(suff2)) {
						return USED_CAR_TYPE;
					} else if("13".equals(suff2)) {
						return ELECTRONIC_VAT_INVOICE_TYPE;
					}
				}else{
					if("2".equals(code.substring(7, 8))){
						return MOTOR_VEHICLE_INVOICE_TYPE;
					}
				}
			}else if(length == 10){
				String eighth = code.substring(7, 8);
				if("1".equals(eighth) || "5".equals(eighth)){
					return VAT_SPA_INVOICE_TYPE;
				}else if("3".equals(eighth) || "6".equals(eighth)){
					return VAT_INVOICE_TYPE;
				}else if("2".equals(eighth) || "7".equals(eighth)){
					return FREIGHT_INVOICE_TYPE;
				}
			}
		}
		return ERROR_TYPE;
	}
	
	/**
	 * 获取企业类型
	 * @param tokenCode
	 * @return
	 */
	public static String getCompanyType(String tokenCode) {
		String defComType = "1";
		if(StringUtil.isNotEmpty(tokenCode)) {
			String levelType = tokenCode.split("~")[0];
			String comType = tokenCode.split("~")[1];
			if(levelType.equals("0") || levelType.equals("5") || levelType.equals("6")) {
				defComType = "1";
			} else if(comType.equals("2") || comType.equals("3")) {
				defComType = comType;
			}
		}
		return defComType;
	}
	
	public static String getErrorType(String errorName) {
		if(errorMap.containsKey(errorName)) {
			return errorMap.get(errorName);
		} else {
			return null;
		}
	}
	
//	/**
//	  * 通过发票代码判断发票类型
//	  1、 电子发票
//	  特殊的发票代码包括：'144031539110', '131001570151', '133011501118', '111001571071'，如果发票代码为以上代码之一，则判定为电子发票。
//	  代码长度为12位，首位为0，最后两位为11。
//	 2、 通行费发票
//	  代码长度为12位，首位为0，最后两位是12。
//	 3、 增值税普通发票
//	  代码长度为12位，首位为0，最后两位是04或05；
//	  代码长度为10位，第8位是3或者6。
//	 4、 卷式发票
//	  代码长度为12位，首位为0，最后两位是06或07；
//	 5、 机动车发票
//	  代码长度为12位，首位不是0，第8位是2
//	 6、 增值税专用发票
//	  代码长度为10位，第8位为1或5。
//	 7、 货物运输发票
//	  代码长度为10位，第8位为2或7
//	 8、 二手车发票
//	  代码长度为12位，首位为0，最后两位是17
//	 9、增值税电子专用发票
//   代码长度为12位，首位为0，最后两位是08	
	
}
