package incheon.uis.ums.service.impl;

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

/**
 * 동적 모델을 사용하는 서비스 예시
 */
@Slf4j
@Service("dynamicModelService") 
@RequiredArgsConstructor
public class DynamicModelServiceImpl implements DynamicModelService {
    
    private final AutoScanModelFactory modelFactory;
    
    /**
     * 기존 코드와 동일한 방식으로 사용
     */
    public Object getModelInstance(String modelName) {
        try {
            Object requestModel = modelFactory.createInstance(modelName);
            log.info("Successfully created model: {}", modelName);
            return requestModel;

        } catch (RuntimeException e) {
            log.error("Failed to create model: {}", modelName, e);
            throw new IllegalStateException("요청 모델 생성에 실패했습니다.", 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());
    }
}
