package eu.dnetlib.data.mapreduce.actions;

import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import eu.dnetlib.actionmanager.actions.ActionFactory;
import eu.dnetlib.actionmanager.actions.AtomicAction;
import eu.dnetlib.actionmanager.common.Agent;
import eu.dnetlib.data.mapreduce.hbase.dataimport.CrossRefToActions;
import org.apache.commons.lang3.StringUtils;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class CrossRefToActionTest {

    private String setName;
    private Agent agent;

    @Before
    public void setup() {
        setName = "DLI";
        agent= new Agent("agentId","agentName", Agent.AGENT_TYPE.service);
    }


    @Ignore
    @Test
    public void testSingleScholixAction2() throws IOException {
        doTestSingleCrossRefAction("/eu/dnetlib/data/mapreduce/actions/broken");
    }

    @Test
    public void testAllScholixAction() throws IOException {
        doTestAllCrossRefAction("/eu/dnetlib/data/mapreduce/actions/part-06036");
    }


    private void doTestSingleCrossRefAction(final String filePath) throws IOException {
        final InputStream is = this.getClass().getResourceAsStream(filePath);
        final BufferedReader in = new BufferedReader(new InputStreamReader(is));

        String line = in.readLine();
        System.out.println(line);
        final JsonParser parser = new JsonParser();
        JsonObject root = parser.parse(line).getAsJsonObject();
        AtomicAction actions = CrossRefToActions.generateActionsFromDump(root, new ActionFactory(), setName, agent, false);
        System.out.println(actions.toJSON());
    }




    private void doTestAllCrossRefAction(final String filePath) throws IOException {
        final InputStream is = this.getClass().getResourceAsStream(filePath);
        final BufferedReader in = new BufferedReader(new InputStreamReader(is));

        String line = in.readLine();
        while(StringUtils.isNotBlank(line)) {

            final JsonParser parser = new JsonParser();
            JsonObject root = parser.parse(line).getAsJsonObject();
            try {
                CrossRefToActions.generateActionsFromDump(root, new ActionFactory(), setName, agent, false);
            } catch (Throwable e) {
                System.out.println(line);
                throw new RuntimeException(e);
            }
            line= in.readLine();
        }
    }



}
