from .cogvideox_i2v_processor import CogVideoXI2VProcessor
from .hunyuanvideo_i2v_processor import HunyuanVideoI2VProcessor
from .opensoraplan_i2v_processor import OpenSoraPlanI2VProcessor
from .wan_i2v_processor import WanVideoI2VProcessor
from .wan_ti2v_processor import WanVideoTI2VProcessor
from .stepvideo_i2v_processor import StepVideoI2VProcessor
from .hunyuanvideo_15_i2v_processor import HunyuanVideo15I2VProcessor

I2V_PROCESSOR_MAPPINGS = {
    "cogvideox_i2v_processor": CogVideoXI2VProcessor,
    "opensoraplan_i2v_processor": OpenSoraPlanI2VProcessor,
    "wan_i2v_processor": WanVideoI2VProcessor,
    "wan_ti2v_processor": WanVideoTI2VProcessor,
    "hunyuanvideo_i2v_processor": HunyuanVideoI2VProcessor,
    "stepvideo_i2v_processor": StepVideoI2VProcessor,
    "hunyuanvideo_15_i2v_processor": HunyuanVideo15I2VProcessor
}


class I2VProcessor:
    """
    The extra processor of the image to video task
    I2VProcessor is the factory class for all i2v_processor

    Args:
        config (dict): for Instantiating an atomic methods
    """

    def __init__(self, config):
        super().__init__()
        i2v_processor_cls = I2V_PROCESSOR_MAPPINGS[config["processor_id"]]
        self.processor = i2v_processor_cls(config)

    def get_processor(self):
        return self.processor