using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;
using ChemAxon.NET.IKVM.Chemistry;
using ChemAxon.NET.API;

namespace ChemAxon.NET.UnitTest.API.Examples.Chemistry.Filter
{    
    public class FilterExample
    {        
        public void Filter_Example()
        {
            var targets = new List<IJChemMolecule>();
            targets.Add(MainFactory.Chemistry.CreateMolecule("benzene"));
            targets.Add(MainFactory.Chemistry.CreateMolecule("methylpropane"));
            targets.Add(MainFactory.Chemistry.CreateMolecule("hexane"));

            IEnumerable<IJChemMolecule> filterResult = DoFilter(targets);

            Console.WriteLine("Filter result:");

            foreach (IJChemMolecule molecule in filterResult)
                Console.WriteLine(molecule.Formula);
        }

        public IEnumerable<IJChemMolecule> DoFilter(IEnumerable<IJChemMolecule> targets)
        {
            IFilter filter = MainFactory.Chemistry.CreateFilter(targets, SearchMode.AtomAtom);
            filter.Options.SearchType = Base.Search.Options.JChemSearchTypes.Substructure;
            filter.Options.ChargeMatchingOption = Base.Search.Options.JChemChargeMatchingModes.Exact;

            IJChemMolecule query = MainFactory.Chemistry.CreateMolecule("methane");
            IEnumerable<IJChemMolecule> filterResult = filter.FindAll(query);
            return filterResult;
        }
    }
}