package cn.iocoder.yudao.module.ocr.framework.ocr.core.client;

import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil;
import cn.iocoder.yudao.module.ocr.enums.ErrorCodeConstants;
import lombok.extern.slf4j.Slf4j;

/**
 * OCR 客户端的抽象类，提供模板方法
 */
@Slf4j
public abstract class AbstractOcrClient<Config extends OcrClientConfig> implements OcrClient {

    /**
     * 配置
     */
    protected Config config;

    public AbstractOcrClient(Config config) {
        this.config = config;
    }

    /**
     * 初始化
     */
    public final void init() {
        doInit();
        log.debug("[init][OCR 客户端({}) 初始化完成]", config.getProvider());
    }

    /**
     * 自定义初始化
     */
    protected abstract void doInit();

    @Override
    public OcrClientConfig getConfig() {
        return config;
    }

    /**
     * 校验图片数据
     */
    protected void validateImageData(byte[] imageData) {
        if (imageData == null || imageData.length == 0) {
            throw ServiceExceptionUtil.exception(ErrorCodeConstants.OCR_IMAGE_INVALID);
        }
        // 百度 OCR 限制 4MB
        if (imageData.length > 4 * 1024 * 1024) {
            throw ServiceExceptionUtil.exception(ErrorCodeConstants.OCR_IMAGE_TOO_LARGE);
        }
    }

}
