package com.infoclinika.pdx.service;

import com.infoclinika.pdx.domain.gene.Gene;
import com.infoclinika.pdx.domain.gene.GeneSubtype;
import com.infoclinika.pdx.projection.GeneNameWithOneSynonym;
import com.infoclinika.pdx.projection.IdAndNameDto;
import com.infoclinika.pdx.service.exception.GeneSynonymCollisionException;

import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * Service to work with gene info.
 */
public interface GeneService {
    void saveGeneInfo(ParsedFile file);

    void updateGenes(Set<Gene> genes);

    Set<Gene> findByNameIn(Collection<String> names);

    Map<String, Gene> findByNameOrSynonym(Collection<String> symbols) throws GeneSynonymCollisionException;

    Set<IdAndNameDto> findByIds(List<Long> ids);

    long count();

    List<GeneNameWithOneSynonym> findGenesLike(String name);

    Map<String, List<GeneNameWithOneSynonym>> findGenesOrSynonyms(Collection<String> symbols);
}
