package eu.dnetlib.data.proto.dli;

import java.io.IOException;

import com.google.protobuf.ExtensionRegistry;
import com.google.protobuf.InvalidProtocolBufferException;
import com.googlecode.protobuf.format.JsonFormat;
import eu.dnetlib.data.proto.DNGFProtos.DNGFEntity;
import eu.dnetlib.data.proto.DliFieldTypeProtos;
import eu.dnetlib.data.proto.DliProtos;
import eu.dnetlib.data.proto.FieldTypeProtos.KeyValue;
import eu.dnetlib.data.proto.FieldTypeProtos.Qualifier;
import eu.dnetlib.data.proto.FieldTypeProtos.StringField;
import eu.dnetlib.data.proto.PersonProtos.Person;
import eu.dnetlib.data.proto.dli.ScholixObjectProtos.Scholix;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.io.IOUtils;
import org.junit.Test;

/**
 * Created by claudio on 30/08/16.
 */
public class DliProtoTest {

	@Test
	public void testProtoExtensions() throws InvalidProtocolBufferException {

		final ExtensionRegistry r = ExtensionRegistry.newInstance();
		r.add(DliFieldTypeProtos.completionStatus);

		KeyValue.Builder kv = KeyValue.newBuilder();
		kv.setKey("set chi?");
		kv.setValue("stocazzo");
		kv.setExtension(DliFieldTypeProtos.completionStatus, "complete");

		final byte[] b = kv.build().toByteArray();

        System.out.println("b = " + new String(Base64.encodeBase64(b)));




		final KeyValue kv1 = KeyValue.parseFrom(b, r);
		System.out.println(kv1.toString());

		DNGFEntity.Builder entity = DNGFEntity.newBuilder();
		entity.addExtension(DliProtos.resolvedfrom, kv.build());

		System.out.println(entity.buildPartial());
	}

	@Test
	public void testParseScholix() throws IOException {
		final String json = IOUtils.toString(getClass().getResource("scholix.json"));

		Scholix.Builder b = Scholix.newBuilder();
		JsonFormat.merge(json, b);

		System.out.println(b.build());
	}


    private Person p(final String s) {
		return Person.newBuilder().setMetadata(Person.Metadata.newBuilder().setFullname(StringField.newBuilder().setValue(s))).build();
	}

	private Qualifier q(String c, String s) {
		return Qualifier.newBuilder().setClassid(c).setClassname(c).setSchemeid(s).setSchemename(s).build();
	}

}
