package com.heyu.api.controller.certificate;

import com.heyu.api.baidu.handle.certificate.BThreeFactorsVerificationHandle;
import com.heyu.api.baidu.request.certificate.BFourFactorsVerificationRequest;
import com.heyu.api.baidu.response.certificate.BThreeFactorsVerificationResp;
import com.heyu.api.controller.BaseController;
import com.heyu.api.data.annotation.CacheResult;
import com.heyu.api.data.annotation.NotIntercept;
import com.heyu.api.data.utils.ApiR;
import com.heyu.api.data.utils.R;
import com.heyu.api.resp.certificate.Factors3VerificationResp;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 企业三要素核验控制器
 * <p>
 * 基于百度 OCR API，对企业三要素信息进行核验，验证企业资质的真实性。
 * 通过核验企业名称、统一社会信用代码、法人姓名的一致性，快速完成企业身份认证。
 * </p>
 * <p>
 * 核验要素：
 * <ul>
 *   <li>企业名称：工商注册的企业全称</li>
 *   <li>统一社会信用代码：企业的唯一标识码</li>
 *   <li>法人姓名：企业法定代表人姓名</li>
 * </ul>
 * </p>
 * <p>
 * 核验结果字段：
 * <ul>
 *   <li>verifyresult：整体验证结果（通过/不通过）</li>
 *   <li>namematch：姓名匹配结果</li>
 *   <li>companymatch：企业名称匹配结果</li>
 *   <li>regnummatch：统一社会信用代码匹配结果</li>
 * </ul>
 * </p>
 * <p>
 * 注意事项：
 * <ul>
 *   <li>仅支持工商注册的企业认证</li>
 *   <li>不支持事业单位、律师事务所等机构</li>
 *   <li>工商变更或新注册企业需在 T+3 工作日后才可验证</li>
 *   <li>启用结果缓存，相同核验请求会返回缓存结果</li>
 * </ul>
 * </p>
 * <p>
 * 适用场景：
 * <ul>
 *   <li>企业认证：快速核验企业资质真实性</li>
 *   <li>风控审核：KYB（Know Your Business）企业身份验证</li>
 *   <li>供应链金融：供应商资质核验</li>
 *   <li>平台入驻：商家企业信息验证</li>
 * </ul>
 * </p>
 * <p>
 * 接口路径：/factors3/recognize
 * </p>
 *
 * @author heyu
 * @since 1.0.0
 */
@Slf4j
@RestController
@RequestMapping("/factors3")
@NotIntercept
public class Factors3VerificationController extends BaseController {

    @Autowired
    private BThreeFactorsVerificationHandle bFourFactorsVerificationHandle;

    /**
     * 企业三要素核验接口
     * <p>
     * 接收企业三要素信息，调用百度 API 进行一致性核验。
     * 返回核验结果包括整体验证结果及各字段的匹配状态。
     * </p>
     *
     * @param request 企业三要素核验请求参数，包含：
     *                - companyName：企业名称
     *                - regNum：统一社会信用代码
     *                - legalPerson：法人姓名
     * @return 核验结果，包含 verifyresult（核验结果）、namematch（名称匹配）、
     *         companymatch（企业匹配）、regnummatch（代码匹配）
     */
    @RequestMapping("/recognize")
    @CacheResult
    public R recognize(BFourFactorsVerificationRequest request) {
        Factors3VerificationResp resp = new Factors3VerificationResp();

        ApiR<BThreeFactorsVerificationResp> bR = bFourFactorsVerificationHandle.handle(request);

        if (bR.isSuccess()) {
            BThreeFactorsVerificationResp bFourFactorsVerificationResp = bR.getData();

            BThreeFactorsVerificationResp.WordsResultDTO wordsResultDTO = bFourFactorsVerificationResp.getWordsResult();
            resp.setVerifyresult(wordsResultDTO.getVerifyresult());
            resp.setNamematch(wordsResultDTO.getNamematch());
            resp.setCompanymatch(wordsResultDTO.getCompanymatch());
            resp.setRegnummatch(wordsResultDTO.getRegnummatch());

            return R.ok().setData(resp);
        }


        return R.error(bR.getErrorMsg());
    }


}
