package com.fitbank.common;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.configuration.Configuration;
import com.fitbank.common.exception.FitbankException;
import com.fitbank.common.properties.PropertiesHandler;
import com.fitbank.dto.management.Detail;

/**
 * Clase abstracta que implemente la lectura de plantillas financieras asociada
 * 
 * @author Software House.
 */

@Slf4j
public abstract class Template {

    private static final Configuration CONFIG = PropertiesHandler
            .getConfig("financial");

    public static Detail execute(Detail pDetail) throws Exception {

        String templateClass = CONFIG.getString("template.financial.class");
        Template template = null;

        log.info("Disparando Verificación De Template " + templateClass);
        try {
            template = (Template) Class.forName(templateClass).newInstance();
        } catch (Exception e) {
            throw new FitbankException("FIT070",
                    "No se pudo cargar la validación de Template  {0} ",
                    templateClass, e);
        }

        return template.normalProcess(pDetail);
    }

    public abstract Detail normalProcess(Detail pDetail) throws Exception;
}