package eu.dnetlib.resolver;

import com.google.gson.Gson;
import eu.dnetlib.data.transform.OntologyLoader;
import eu.dnetlib.dli.DLIUtils;
import eu.dnetlib.enabling.locators.UniqueServiceLocator;
import eu.dnetlib.rmi.enabling.ISLookUpService;
import org.apache.commons.io.IOUtils;
import org.junit.Before;
import org.mockito.Mock;
import org.mockito.Mockito;

import java.io.InputStream;
import java.util.Arrays;
import java.util.List;
import java.util.Map;

import static org.mockito.Mockito.when;

public abstract class DLIAbstractTest {
    @Mock
    protected DLIUtils dliUtilsInstance;


    @Mock
    protected UniqueServiceLocator uniqueServiceLocator;

    @Mock
    protected ISLookUpService isLookUpServiceMock;

    @Before
    public void initialize() throws Exception {

        final String query = "for $x in collection('/db/DRIVER/RepositoryServiceResources/RepositoryServiceResourceType') "
                + "return concat($x//FIELD[./key='NamespacePrefix']/value/text(),'@--@',$x//FIELD[./key='DataSourceId']/value/text(),'@--@',$x//ENGLISH_NAME )";
        dliUtilsInstance = Mockito.mock(DLIUtils.class);

        uniqueServiceLocator = Mockito.mock(UniqueServiceLocator.class);
        isLookUpServiceMock = Mockito.mock(ISLookUpService.class);
        dliUtilsInstance.setServiceLocator(uniqueServiceLocator);


        final InputStream inputStream = this.getClass().getResourceAsStream("/eu/dnetlib/transformation/data-center.json");
        Map<String, String> dataciteDatasource = new Gson().fromJson(IOUtils.toString(inputStream), Map.class);

        DLIUtils.setInstance(dliUtilsInstance);
        when(dliUtilsInstance.getServiceLocator()).thenReturn(uniqueServiceLocator);
        when(dliUtilsInstance.getDataciteDatasource()).thenReturn(dataciteDatasource);

        when(uniqueServiceLocator.getService(ISLookUpService.class)).thenReturn(isLookUpServiceMock);


        List<String> resutlDS = Arrays.asList(
                "r3d100010255@--@dli_________::r3d100010255@--@icpsr",
                "r3d100010134@--@dli_________::r3d100010134@--@pangaea",
                "r3d100010464@--@dli_________::r3d100010464@--@ANDS",
                "r3d100010327@--@dli_________::r3d100010327@--@RCSB",
                "nature______@--@dli_________::nature______@--@Nature",
                "ieee________@--@dli_________::ieee________@--@IEEE",
                "r3d100010578@--@dli_________::r3d100010578@--@IEDA",
                "r3d100010216@--@dli_________::r3d100010216@--@3tU",
                "r3d100010255@--@dli_________::r3d100010255@--@icpsr",
                "datacite____@--@dli_________::datacite____@--@Datasets in Datacite",
                "r3d100010527@--@dli_________::r3d100010527@--@European Nucleotide Archive"
        );
        when(isLookUpServiceMock.quickSearchProfile(query)).thenReturn(resutlDS);
        DLIUtils.ontologies = OntologyLoader.loadOntologiesFromCp();
    }
}
