package eu.dnetlib.recolecta.index;

import eu.dnetlib.clients.index.client.IndexClient;
import eu.dnetlib.clients.index.client.IndexClientException;
import eu.dnetlib.clients.index.client.ResolvingIndexClientFactory;
import eu.dnetlib.enabling.locators.UniqueServiceLocator;
import eu.dnetlib.functionality.modular.ui.index.IndexClientMap;
import eu.dnetlib.msro.workflows.graph.Arc;
import eu.dnetlib.msro.workflows.nodes.SimpleJobNode;
import eu.dnetlib.msro.workflows.procs.Env;
import eu.dnetlib.recolecta.utils.BlackListManager;
import eu.dnetlib.recolecta.utils.IndexClientManager;
import eu.dnetlib.rmi.enabling.ISLookUpException;
import eu.dnetlib.rmi.enabling.ISLookUpService;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import org.springframework.beans.factory.annotation.Autowired;

import java.io.StringReader;
import java.util.List;

/**
 * Created by miriam on 30/05/2018.
 */
public class RemoveFromIndexJobNode extends SimpleJobNode{

    @Autowired
    private IndexClientMap clientMap;

    @Autowired
    private ResolvingIndexClientFactory indexClientFactory;

    @Autowired
    IndexClientManager indexClientManager;

    @Autowired
    private BlackListManager blackListManager;

    final String BACK_END = "solr";
    final String INTERPRETATION = "cleaned";
    final String FORMAT = "PMF";
    final String LAYOUT = "index";
    final String ALL = "all";

    public String getIndexId() {
        return indexId;
    }

    public void setIndexId(String indexId) {
        this.indexId = indexId;
    }

    public String getFormat() {
        return format;
    }

    public void setFormat(String format) {
        this.format = format;
    }

    public String getLayout() {
        return layout;
    }

    public void setLayout(String layout) {
        this.layout = layout;
    }

    private String indexId;
    private String format;
    private String layout;

    private static final Log log = LogFactory.getLog(RemoveFromIndexJobNode.class);

    private IndexClient initClient() throws IndexClientException {
        String indexClientKeys = BACK_END + "-" + FORMAT + "-" + LAYOUT + "-" + INTERPRETATION;

        log.debug(indexClientKeys);

        if (!getClientMap().getMap().containsKey(indexClientKeys)) {
            getClientMap().getMap().put(indexClientKeys, indexClientFactory.getClient(FORMAT, LAYOUT, INTERPRETATION, BACK_END));
        }
        return getClientMap().getMap().get(indexClientKeys);
    }

    public void remove() throws IndexClientException, ISLookUpException, DocumentException {
        IndexClient client = initClient();
       // BlackListManager blm = new BlackListManager();

        for(String id: blackListManager.getIds())
            client.delete("objidentifier exact \"" + id + "\"");

    }

    @Override
    protected String execute(Env env) throws Exception {
        remove();
        return Arc.DEFAULT_ARC;
    }

    public IndexClientMap getClientMap() {
        return clientMap;
    }

    public void setClientMap(IndexClientMap clientMap) {
        this.clientMap = clientMap;
    }
}
