package com.ycwl.basic.image.enhancer;

import com.ycwl.basic.image.enhancer.adapter.BceImageEnhancer;
import com.ycwl.basic.image.enhancer.adapter.BceImageSR;
import com.ycwl.basic.image.enhancer.adapter.IEnhancer;
import com.ycwl.basic.image.enhancer.entity.BceEnhancerConfig;

/**
 * 图像增强器工厂
 * 用于创建不同类型的图像增强器实例
 */
public class ImageEnhancerFactory {

    /**
     * 增强器类型枚举
     */
    public enum EnhancerType {
        /**
         * 图像清晰度增强
         * 使用imageDefinitionEnhance接口，适合提升整体清晰度
         */
        DEFINITION_ENHANCE,

        /**
         * 图像超分辨率
         * 使用imageQualityEnhance接口，适合放大图片同时保持质量
         */
        SUPER_RESOLUTION
    }

    /**
     * 创建图像增强器
     *
     * @param type   增强器类型
     * @param config 百度云配置
     * @return 图像增强器实例
     */
    public static IEnhancer createEnhancer(EnhancerType type, BceEnhancerConfig config) {
        IEnhancer enhancer = switch (type) {
            case DEFINITION_ENHANCE -> new BceImageEnhancer();
            case SUPER_RESOLUTION -> new BceImageSR();
        };

        if (enhancer instanceof BceImageEnhancer) {
            ((BceImageEnhancer) enhancer).setConfig(config);
        } else if (enhancer instanceof BceImageSR) {
            ((BceImageSR) enhancer).setConfig(config);
        }

        return enhancer;
    }

    /**
     * 创建默认的图像增强器（清晰度增强）
     *
     * @param config 百度云配置
     * @return 图像增强器实例
     */
    public static IEnhancer createDefaultEnhancer(BceEnhancerConfig config) {
        return createEnhancer(EnhancerType.DEFINITION_ENHANCE, config);
    }
}
