package eu.dnetlib.data.claims.handler;

import eu.dnetlib.data.claims.entity.Organization;
import eu.dnetlib.data.claims.parser.OafParser;
import eu.dnetlib.data.claims.parser.OpenAIRERecordParser;
import eu.dnetlib.data.claims.sql.SqlDAO;
import eu.dnetlib.data.claims.utils.QueryGenerator;
import eu.dnetlib.data.claims.utils.SearchUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;


public class OrganizationHandler {
    SearchUtils searchUtils = null;
    OafParser oafParser = null;
    OpenAIRERecordParser openAIRERecordParser = null;
    SqlDAO sqlDAO = null;
    QueryGenerator queryGenerator = null;

    private static Logger logger = LogManager.getLogger(OrganizationHandler.class);

    private String fetchOrganizationById(String id) throws Exception {
        return searchUtils.fetchOrganizationXmlFromIndex(id);
    }

    public Organization fetchOrganizationByID(String id) throws Exception {
        if(searchUtils.getNewJsonSearchAPIUrl() != null || searchUtils.getNewJsonSearchOrganizationAPIUrl() != null){
            return openAIRERecordParser.parse2Organization(searchUtils.fetchOrganizationById(id));
        }
        return fetchOrganizationByOaf(fetchOrganizationById(id));
    }

    public Organization fetchOrganizationByOaf(String oaf) throws Exception {
        return oafParser.oaf2Organization(oaf);
    }
/*    public String generateSaveQueryForProject(Project project){
        return queryGenerator.generateInsertProjectQuery(project.getOpenaireId(),project.getName(),project.getAcronym(),project.getFunderId(),project.getFunderName(),project.getFunderShortName());
    }
    public void saveProject(Project project) throws Exception {
        sqlDAO.executePreparedQuery(generateSaveQueryForProject(project));
    }*/
    public OafParser getOafParser() {
        return oafParser;
    }

    public void setOafParser(OafParser oafParser) {
        this.oafParser = oafParser;
    }

    public SearchUtils getSearchUtils() {
        return searchUtils;
    }

    public void setSearchUtils(SearchUtils searchUtils) {
        this.searchUtils = searchUtils;
    }
    public QueryGenerator getQueryGenerator() {
        return queryGenerator;
    }

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

    public SqlDAO getSqlDAO() {
        return sqlDAO;
    }

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

    public OpenAIRERecordParser getOpenAIRERecordParser() {
        return openAIRERecordParser;
    }

    public void setOpenAIRERecordParser(OpenAIRERecordParser openAIRERecordParser) {
        this.openAIRERecordParser = openAIRERecordParser;
    }
}
