package incheon.sgp.rst.service.impl;

import incheon.sgp.rst.service.RstDynamicModelService;
import incheon.uis.ums.factory.AutoScanModelFactory;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

/**
 * 동적 모델을 사용하는 서비스 예시
 */
@Slf4j
@Service
@RequiredArgsConstructor
public class RstDynamicModelServiceImpl implements RstDynamicModelService {
    
    private final AutoScanModelFactory modelFactory;
    
    /**
     * 기존 코드와 동일한 방식으로 사용
     */
    public Object getModelInstance(String modelName) {
        try {
            Object requestModel = modelFactory.createInstance(modelName);
            log.info("Successfully created model: {}", modelName);
            return requestModel;
            
        } catch (Exception e) {
            log.error("Failed to create model: {}", modelName, e);
            throw e;
        }
    }
    
    /**
     * 타입 안전한 버전
     */
    public <T> T getTypedModelInstance(String modelName, Class<T> modelType) {
        return modelFactory.createInstance(modelName, modelType);
    }
    
    /**
     * 모델 정보 조회
     */
    public void printModelInfo() {
        log.info("=== Registered Models ===");
        for (String modelName : modelFactory.getRegisteredModelNames()) {
            log.info("{}: {} ({})", 
                modelName, 
                modelFactory.getModelClass(modelName).getSimpleName(),
                modelFactory.getModelDescription(modelName)
            );
        }
        log.info("Total: {} models", modelFactory.getRegisteredModelCount());
    }
}
