package eu.dnetlib.data.claims.handler;

import eu.dnetlib.data.claims.entity.Context;
import eu.dnetlib.data.claims.sql.SQLStoreException;
import eu.dnetlib.data.claims.sql.SqlDAO;
import eu.dnetlib.data.claims.utils.QueryGenerator;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import java.sql.ResultSet;
import java.util.ArrayList;

public class FetchContextHandler {

    private Logger log = LogManager.getLogger(this.getClass());

    SqlDAO sqlDAO = null;
    QueryGenerator queryGenerator = null;

    public FetchContextHandler(){

    }

    public Context fetchFirstContextByCommunityId(String communityId) throws Exception, SQLStoreException {
        ArrayList<Object> params = new ArrayList<>();
        String query = queryGenerator.generateSelectFirstContextByCommunityIdQuery(communityId, params);
        ResultSet rs = sqlDAO.executePreparedQuery(query, params);

        Context context = fetchContextByResultSet(rs);
        if(context == null) {
            log.info("No context with community id : "+ communityId+"\n");
        }

        return context;
    }


    public Context fetchContextByResultSet(ResultSet rs) throws Exception {
        Context context = null;
        while(rs.next()) {
            context = new Context();
            context.setOpenaireId(rs.getString("openaire_id"));
            context.setTitle(rs.getString("context_title"));
        }
        return context;
    }

    public SqlDAO getSqlDAO() {
        return sqlDAO;
    }

    public void setSqlDAO(SqlDAO sqlDAO) {
        this.sqlDAO = sqlDAO;
    }

    public QueryGenerator getQueryGenerator() {
        return queryGenerator;
    }

    public void setQueryGenerator(QueryGenerator queryGenerator) {
        this.queryGenerator = queryGenerator;
    }
}
