/**
 * 
 */
package com.fitbank.drools;

import java.io.FileInputStream;
import java.io.InputStream;
import java.io.Serializable;

import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
import org.drools.builder.DecisionTableConfiguration;
import org.drools.builder.DecisionTableInputType;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.compiler.DecisionTableFactory;
import org.drools.io.ResourceFactory;
import org.drools.runtime.StatefulKnowledgeSession;

public class RuleManager {
    private KnowledgeBase kbase;

    public RuleManager(InputStream pIn, RuleTypes pType) throws Exception {
        KnowledgeBuilder kbuilder = pType.getBuilder(pIn);
        this.kbase = KnowledgeBaseFactory.newKnowledgeBase();
        this.kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
    }

    public RuleManager(String pPath, RuleTypes pType) throws Exception {
        this(new FileInputStream(pPath), pType);
    }

    public void evalRules(Serializable pMessage) {
        StatefulKnowledgeSession ksession = this.kbase.newStatefulKnowledgeSession();
        ksession.insert(pMessage);
        ksession.fireAllRules();
    }

    public void execFlow(String pFlow) {
        StatefulKnowledgeSession ksession = this.kbase.newStatefulKnowledgeSession();
        ksession.startProcess(pFlow);

    }

    public static String xlsToRule(String pPath) throws Exception {
        return xlsToRule(ResourceFactory.newFileResource(pPath).getInputStream());

    }

    public static String xlsToRule(InputStream pIn) throws Exception {
        DecisionTableConfiguration dtconf = KnowledgeBuilderFactory.newDecisionTableConfiguration();
        dtconf.setInputType(DecisionTableInputType.XLS);
        return DecisionTableFactory.loadFromInputStream(pIn, dtconf);

    }
}
