package org.springblade.thirdparty.ocr.constant;

import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.List;

/**
 *  ocr 各类型字段枚举
 * @author bfhuange
 * @date 2024/11/4
 */
public class OCRKey {
    /**
     *  驾驶证-正⻚ 字段列表
     */
    public static final List<KeyInfo> DRIVER_LICENSE_MAIN_KEYS = List.of(
            // 证号
            KeyInfo.ID_NO,
            // 姓名
            KeyInfo.NAME,
            // 性别
            KeyInfo.SEX,
            // 出⽣⽇期
            KeyInfo.DATE_BIRTH,
            // 初次领证⽇期
            KeyInfo.DATE_FIRST_ISSUE,
            // 准驾⻋型
            KeyInfo.CLASS,
            // 有效期限(起始时间)
            // KeyInfo.DATE_VALID_START,
            // 有效期限(终⽌时间)
            // KeyInfo.DATE_VALID_END,
            // 有效期限
            KeyInfo.DATE_VALID,
            // 住址
            KeyInfo.ADDRESS
    );
    /**
     *  驾驶证-副⻚ 字段列表
     */
    public static final List<KeyInfo> DRIVER_LICENSE_SIDE_KEYS = List.of(
            // 档案编号
            KeyInfo.FILE_NO
    );
    /**
     *  ⾏驶证-正⻚ 字段列表
     */
    public static final List<KeyInfo> VEHICLE_LICENSE_MAIN_KEYS = List.of(
            // 车牌号
            KeyInfo.PLATE_NO,
            // ⻋辆类型
            KeyInfo.VEHICLE_TYPE,
            // 姓名
            KeyInfo.NAME,
            // 使⽤性质
            KeyInfo.USE_CHARACTER,
            // 品牌型号
            KeyInfo.MODEL,
            // ⻋架号
            KeyInfo.VIN,
            // 发动机号码
            KeyInfo.ENGINE_NO,
            // 注册⽇期
            KeyInfo.DATE_REGISTER,
            // 发证⽇期
            KeyInfo.DATE_ISSUE,
            // 住址
            KeyInfo.ADDRESS
    );
    /**
     *  ⾏驶证-副⻚ 字段列表
     */
    public static final List<KeyInfo> VEHICLE_LICENSE_SIDE_KEYS = List.of(
            // 档案编号
            KeyInfo.FILE_NO,
            // 检验有效期
            KeyInfo.DATE_VALID_INSPECTION
    );
    /**
     *  ⻋头 字段列表
     */
    public static final List<KeyInfo> CAR_FRONT_KEYS = List.of(
            // ⻋牌号
            KeyInfo.PLATE_NO
    );
    /**
     *  ⻋尾 字段列表
     */
    public static final List<KeyInfo> CAR_BACK_KEYS = List.of(
            // ⻋牌号
            KeyInfo.PLATE_NO
    );
    /**
     *  过磅单 字段列表
     */
    public static final List<KeyInfo> POUND_KEYS = List.of(
            // ⽇期
            KeyInfo.DATE,
            // 单位
            KeyInfo.UNIT_MEASURE,
            // ⻋牌号
            KeyInfo.PLATE_NO,
            // 货品
            KeyInfo.NAME_GOODS,
            // 收货单位
            KeyInfo.COMPANY_RECEIPT,
            // 发货单位
            KeyInfo.COMPANY_SHIP,
            // ⽑重
            KeyInfo.WEIGHT_GROSS,
            // ⽪重
            KeyInfo.WEIGHT_TARE,
            // 净重
            KeyInfo.WEIGHT_NET,
            // 扣重
            KeyInfo.WEIGHT_DEDUCT,
            // 实际净重
            KeyInfo.WEIGHT_RECEIVED
    );
    /**
     *  身份证-正⻚ 字段列表
     */
    public static final List<KeyInfo> ID_CARD_MAIN_KEYS = List.of(
            // 姓名
            KeyInfo.NAME,
            // 公民身份号码
            KeyInfo.ID_NO,
            // 性别
            KeyInfo.ID_CARD_MAIN_GENDER,
            // 民族
            KeyInfo.ID_CARD_MAIN_ETHNIC_GROUP,
            // 出生
            KeyInfo.DATE,
            // 住址
            KeyInfo.ID_CARD_MAIN_ADD
    );
    /**
     *  身份证-副⻚ 字段列表
     */
    public static final List<KeyInfo> ID_CARD_SIDE_KEYS = List.of(
            // 签发机关
            KeyInfo.ISSUING_AUTHORITY,
            // 有效期限
            KeyInfo.DATE_VALID
    );

    /**
     *  所有类型
     */
    @AllArgsConstructor
    @Getter
    public enum KeyInfo {
        /**
         * 住址
         */
        ADDRESS("address", "住址"),
        /**
         * 证号
         */
        ID_NO("ID_no", "证号"),
        /**
         * 发动机号码
         */
        ENGINE_NO("engine_no", "发动机号码"),
        /**
         * 档案编号
         */
        FILE_NO("file_no", "档案编号"),
        /**
         * 供货单位、客户名称、发货单位
         */
        COMPANY_SHIP("company_ship", "供货单位、客户名称、发货单位"),
        /**
         * 收货单位
         */
        COMPANY_RECEIPT("company_receipt", "收货单位"),
        /**
         * ⽇期
         */
        DATE("date", "⽇期"),
        /**
         * 出⽣⽇期
         */
        DATE_BIRTH("date_birth", "出⽣⽇期"),
        /**
         * 注册⽇期
         */
        DATE_REGISTER("date_register", "注册⽇期"),
        /**
         * 初次领证⽇期
         */
        DATE_FIRST_ISSUE("date_first_issue", "初次领证⽇期"),
        /**
         * 注册⽇期
         */
        DATE_ISSUE("date_issue", "发证⽇期"),
        /**
         * 有效期限(起始时间)
         */
        DATE_VALID_START("date_vaild_start", "有效期限(起始时间)"),
        /**
         * 有效期限(终⽌时间)
         */
        DATE_VALID_END("date_vaild_end", "有效期限(终⽌时间)"),
        /**
         * ⾏驶证副⻚-备注 -> 检验有效期
         */
        DATE_VALID_INSPECTION("date_vaild_inspection", "⾏驶证副⻚-备注 -> 检验有效期"),
        /**
         * 性别
         */
        SEX("six", "性别"),
        /**
         * 国籍
         */
        NATIONALITY("nationality", "国籍"),
        /**
         * ⺠族
         */
        NATION("nation", "⺠族"),
        /**
         * 姓名、所有⼈
         */
        NAME("name", "姓名、所有⼈"),
        /**
         * 货物名称、货品名称
         */
        NAME_GOODS("name_goods", "货物名称、货品名称"),
        /**
         * 物料
         */
        NAME_MATERIAL("name_material", "物料"),
        /**
         * ⻋辆类型
         */
        VEHICLE_TYPE("vehicle_type", "⻋辆类型"),
        /**
         * 使⽤性质
         */
        USE_CHARACTER("use_character", "使⽤性质"),
        /**
         * 品牌型号
         */
        MODEL("model", "品牌型号"),
        /**
         * 准驾⻋型
         */
        CLASS("class", "准驾⻋型"),
        /**
         * ⻋架号
         */
        VIN("vin", "⻋架号"),
        /**
         * ⻋牌号、号牌号码、⻋号
         */
        PLATE_NO("plate_no", "⻋牌号、号牌号码、⻋号"),
        /**
         * 扣重、扣杂
         */
        WEIGHT_DEDUCT("weight_deduct", "扣重、扣杂"),
        /**
         * ⽑重、总重
         */
        WEIGHT_GROSS("weight_gross", "⽑重、总重"),
        /**
         * ⽪重、空重
         */
        WEIGHT_TARE("weight_tare", "⽪重、空重"),
        /**
         * 净重
         */
        WEIGHT_NET("weight_net", "净重"),
        /**
         * 实际净重
         */
        WEIGHT_RECEIVED("weight_received", "实际净重"),
        /**
         * 杂质
         */
        WEIGHT_IMPURITY("weight_impurity", "杂质"),
        /**
         * 粉末
         */
        WEIGHT_POWDER("weight_powder", "粉末"),
        /**
         * 明⽔
         */
        WEIGHT_CWATER("weight_cwater", "明⽔"),
        /**
         * 单位
         */
        UNIT_MEASURE("unit_measure", "单位"),
        /**
         * 识别了但是还未⽀持整合的结构化字段
         */
        UN_SUPPORT("unsupport", "识别了但是还未⽀持整合的结构化字段"),

        //===================身份证的有些字段不一样==============================
        /**
         * 身份证-性别
         */
        ID_CARD_MAIN_GENDER("gender", "性别"),
        /**
         * 身份证-民族
         */
        ID_CARD_MAIN_ETHNIC_GROUP("ethnic_group", "民族"),
        /**
         * 身份证-住址
         */
        ID_CARD_MAIN_ADD("add", "住址"),
        /**
         * 签发机关
         */
        ISSUING_AUTHORITY("issuing_authority", "签发机关"),
        /**
         * 有效期限
         */
        DATE_VALID("date_vaild", "有效期限"),
        ;
        /**
         *  字段编码
         */
        private final String key;
        /**
         *  字段描述
         */
        private final String description;
    }

}
