package eu.dnetlib.data.transform;

import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.googlecode.protobuf.format.JsonFormat;
import eu.dnetlib.data.graph.model.DNGFDecoder;
import eu.dnetlib.data.graph.model.DNGFRowKeyDecoder;
import eu.dnetlib.data.mapreduce.util.dao.HBaseTableDAO;
import eu.dnetlib.data.proto.DNGFProtos;
import eu.dnetlib.data.proto.DNGFProtos.DNGF;
import eu.dnetlib.data.proto.KindProtos;
import eu.dnetlib.data.proto.TypeProtos.Type;
import eu.dnetlib.data.proto.WDSIndexItemProtos;
import eu.dnetlib.data.proto.WdsDatasetProtos;
import eu.dnetlib.dli.proto.DNGF2Scholix2Converter;
import eu.dnetlib.dli.proto.DNGFDLISummaryConverter;
import eu.dnetlib.wds.proto.DNGFWDSIndexConverter;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.hbase.client.Put;
import org.junit.Before;
import org.junit.Test;

import java.util.*;
import java.util.Map.Entry;

import static eu.dnetlib.data.graph.utils.RelDescriptor.QUALIFIER_SEPARATOR;
import static eu.dnetlib.data.proto.dli.Scholix2ObjectProtos.Scholix;

/**
 * Created by sandro on 2/13/17.
 */
public class WDSConvertertTest extends AbstractTransformerTest {

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

    private Ontologies ontologies;

    @Before
    public void setUp() throws Exception {
        factory = new XsltRowTransformerFactory();
        ontologies = OntologyLoader.loadOntologiesFromCp();
    }

    @Test
    public void testIndexItem() throws Exception {

        final List<Row> rows = Lists.newArrayList();
        rows.addAll(asRows(loadFromTransformationProfile("dmfwds2hbase.xml"), load("inputWDSDMF.xml")));
        final DNGFWDSIndexConverter converter = new DNGFWDSIndexConverter();
        List<DNGFProtos.DNGFRel> relations = new ArrayList<>();
        WDSIndexItemProtos.Item.Builder item = WDSIndexItemProtos.Item.newBuilder();
        rows.forEach(row -> {
                    Collection<Column<String, byte[]>> columns = row.getColumns();
                    for (Column<String, byte[]> result : columns) {
                        final DNGFDecoder decoder =
                                DNGFDecoder.decode(result.getValue(), WdsDatasetProtos.WdsDataset.geolocation, WdsDatasetProtos.WdsDataset.otherRels);
                        DNGF dngf = decoder.getDNGF();
                        if (dngf.getKind() == KindProtos.Kind.entity) {
                            item.mergeFrom(converter.convert(dngf).build());
                        } else {
                            relations.add(dngf.getRel());
                        }
                    }
                }
        );

        relations.forEach(it -> converter.addRelation(item ,it));
        System.out.println(JsonFormat.printToString(item.build()));


    }


}
