package org.biojava.nbio.structure.io;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;

import org.biojava.nbio.structure.Atom;
import org.biojava.nbio.structure.Chain;
import org.biojava.nbio.structure.Group;
import org.biojava.nbio.structure.Structure;
import org.junit.Test;

/**
 * This class will test parsing short CONECT lines.
 * @since Nov 30, 2016
 * @author larsonm
 */
public class TestShortLines {
	
	@Test
	public void testConect() throws IOException {
		PDBFileParser pdbPars = new PDBFileParser();
		FileParsingParameters params = pdbPars.getFileParsingParameters();
		params.setCreateAtomBonds(true);
		
		// CONECTS will be deprecated, but will we create bonds?
		// Like the LINK records, should BioJava create BondImpl when params.setCreateAtomBonds(true)?
		
		StringBuilder sb = new StringBuilder();
		sb.append("HETATM 2398  P   FAD A 500       8.398  46.448  73.490  1.00 13.51           P \n");
		sb.append("HETATM 2399  PA  FAD A 500       6.089  45.580  75.235  1.00 15.88           P \n");
		sb.append("HETATM 2400  O1P FAD A 500       7.908  47.684  72.869  1.00  4.19           O \n");
		sb.append("CONECT 2400 2398\n");
		String shortLine = sb.toString();
		Structure s;
		// Parse short
		try(InputStream is = new ByteArrayInputStream(shortLine.getBytes())) {
			s = pdbPars.parsePDBFile(is);
		}
		
		// After 4.2, CONECTS are deprecated, but there is not yet an implementation
		// describing how CONECTS will be replaced - will Bonds be created?
		// assertEquals(1, s.getConnections().size());
		assertNotNull(s); 
	}
	
	@Test
	public void testLINK() throws IOException {
		Structure s;
		PDBFileParser pdbPars = new PDBFileParser();
		FileParsingParameters params = pdbPars.getFileParsingParameters();
		params.setCreateAtomBonds(true);
		
		StringBuilder sb = new StringBuilder();
		sb.append("ATOM   2412  C21 2EG A   7       0.888  44.973  72.238  1.00 29.17           C \n");
		sb.append("ATOM   2413  C22 2EG B  19       0.888  44.973  72.238  1.00 29.17           C \n");
		//sb.append("LINK         C21 2EG A   7                 C22 2EG B  19     1555   1555  1.56 ");
		sb.append("LINK         C21 2EG A   7                 C22 2EG B  19\n");
		String shortLine = sb.toString();
		
		// Parse short
		try(InputStream is = new ByteArrayInputStream(shortLine.getBytes())) {
			s = pdbPars.parsePDBFile(is);
		}
		
		// Should be a bond present in the Atoms.
		Chain c = s.getChainByIndex(0, 0);
		Group g = c.getAtomGroups().get(0);
		Atom a = g.getAtom(0);
		assertEquals(1, a.getBonds().size());
	}
}
