/*
 *                    BioJava development code
 *
 * This code may be freely distributed and modified under the
 * terms of the GNU Lesser General Public Licence.  This should
 * be distributed with the code.  If you do not have a copy,
 * see:
 *
 *      http://www.gnu.org/copyleft/lesser.html
 *
 * Copyright for this code is held jointly by the individual
 * authors.  These should be listed in @author doc comments.
 *
 * For more information on the BioJava project and its aims,
 * or to join the biojava-l mailing list, visit the home page
 * at:
 *
 *      http://www.biojava.org/
 *
 */
package org.biojava.nbio.structure.redmine;


import org.biojava.nbio.structure.*;
import org.biojava.nbio.structure.align.util.AtomCache;
import org.biojava.nbio.structure.io.FileParsingParameters;
import org.biojava.nbio.structure.io.mmcif.ChemCompGroupFactory;
import org.biojava.nbio.structure.io.mmcif.ChemCompProvider;
import org.biojava.nbio.structure.io.mmcif.DownloadChemCompProvider;
import org.junit.Test;
import static org.junit.Assert.*;

import java.io.IOException;

/** test for https://redmine.open-bio.org/issues/3282
 *
 * @author Andreas Prlic
 *
 */
public class test1DARSeqAlign {

	@Test
	public void test1DAR() throws StructureException, IOException {
		AtomCache cache = new AtomCache();
		FileParsingParameters orig = cache.getFileParsingParams();
		FileParsingParameters params = new FileParsingParameters();
		params.setAlignSeqRes(true);

		cache.setFileParsingParams(params);

		boolean usingReducedChemCompProvider = false;

		ChemCompProvider ccp =ChemCompGroupFactory.getChemCompProvider();
		if (ccp.getClass().getName().contains("ReducedChemCompProvider") ) {
			usingReducedChemCompProvider = true;

			ChemCompGroupFactory.setChemCompProvider(new DownloadChemCompProvider());
		}

		Structure struc = cache.getStructure("1DAR");

		Chain a = struc.getPolyChainByPDB("A");
		Chain b = struc.getNonPolyChainsByPDB("A").get(0);

		//System.out.println(c.getSeqResGroups());

		Group g = b.getGroupByPDB(ResidueNumber.fromString("692"));
		//System.out.println(g);
		//System.out.println(FileConvert.toPDB(g.getAtom(0)));

		Group g3 = a.getGroupByPDB(ResidueNumber.fromString("689"));
		//System.out.println(g3);
		//System.out.println(FileConvert.toPDB(g3.getAtom(0)));

		assertTrue(! a.getSeqResGroups().contains(g));

		assertTrue( g instanceof NucleotideImpl);

		assertTrue(g.getType().equals(GroupType.NUCLEOTIDE));

		assertTrue( g3.getPDBName().equals("LYS"));
		assertTrue( a.getSeqResGroups().contains(g3));

		assertTrue( g3 instanceof AminoAcid);




		if (usingReducedChemCompProvider)
			ChemCompGroupFactory.setChemCompProvider(ccp);

		cache.setFileParsingParams(orig);
	}
}
