package com.heyu.api.baidu.handle.traffic;

import com.heyu.api.baidu.BaiduBaseHandle;
import com.heyu.api.baidu.request.traffic.BDriverLicenseRequest;
import com.heyu.api.data.annotation.CustomPath;
import com.heyu.api.data.constants.ApiConstants;
import com.heyu.api.data.utils.StringUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.util.Map;

/**
 * https://console.bce.baidu.com/support/#/api?product=AI&project=文字识别&parent=交通场景OCR&api=rest%2F2.0%2Focr%2Fv1%2Fdriving_license&method=post
 * <p>
 * <p>
 * 驾驶证识别 - 百度OCR
 *
 * 支持对机动车驾驶证正页及副页所有字段进行结构化识别。
 * 驾驶证正页：证号、姓名、性别、国籍、出生日期、初次领证日期、准驾车型、有效起始日期、失效日期、住址、发证单位 11个字段
 * 驾驶证副页：姓名、记录、证号、档案编号 4个字段
 * 同时支持识别交管12123 APP 发放的电子驾驶证正页，包括证号、姓名、性别、国籍、出生日期、初次领证日期、准驾车型、有效起始日期、失效日期、累积记分、状态、档案编号、生成时间、当前时间、条形码下编号 15个字段
 */
@Component
@Slf4j
@CustomPath("driverLicense")
public class BDriverLicenseHandle extends BaiduBaseHandle<BDriverLicenseRequest, Map> {

    @Override
    public String getUri() {
        return "/rest/2.0/ocr/v1/driving_license";
    }

    @Override
    public String check(BDriverLicenseRequest request) {
        if (checkNotTrueFalse(request.getDetectDirection())) {
            return "detectDirection 必须传 " + ApiConstants.trueOrFalse
                    + ",false：默认值，不检测朝向, true：检测朝向";
        }
        if (checkNotFrontBack(request.getDrivingLicenseSide())) {
            return "drivingLicenseSide 必须传 " + ApiConstants.frontOrback
                    + ",front：识别驾驶证正页、电子驾驶证正页, back：识别驾驶证副页";
        }
        if (checkNotTrueFalse(request.getUnifiedValidPeriod())) {
            return "unifiedValidPeriod 必须传 " + ApiConstants.trueOrFalse
                    + ",false：默认值，不进行归一化处理, true：归一化格式输出";
        }
        if (checkNotTrueFalse(request.getQualityWarn())) {
            return "qualityWarn 必须传 " + ApiConstants.trueOrFalse
                    + ",false：不输出质量告警信息, true：输出遮挡、不完整质量告警信息";
        }
        if (checkNotTrueFalse(request.getRiskWarn())) {
            return "riskWarn 必须传 " + ApiConstants.trueOrFalse
                    + ",false：不输出风险告警信息, true：开启，输出驾驶正复印、翻拍、PS等告警信息";
        }
        return checkImageUri(request);
    }

    @Override
    public String getContent(BDriverLicenseRequest request) {
        StringBuffer sb = getImageContent(request);
        if (StringUtils.isNotBlank(request.getDetectDirection())) {
            sb.append("&detect_direction=").append(request.getDetectDirection());
        }
        if (StringUtils.isNotBlank(request.getDrivingLicenseSide())) {
            sb.append("&driving_license_side=").append(request.getDrivingLicenseSide());
        }
        if (StringUtils.isNotBlank(request.getUnifiedValidPeriod())) {
            sb.append("&unified_valid_period=").append(request.getUnifiedValidPeriod());
        }
        if (StringUtils.isNotBlank(request.getQualityWarn())) {
            sb.append("&quality_warn=").append(request.getQualityWarn());
        }
        if (StringUtils.isNotBlank(request.getRiskWarn())) {
            sb.append("&risk_warn=").append(request.getRiskWarn());
        }
        return sb.toString();
    }

}
