using System.Data;
using chemaxon.struc;
using chemaxon.formats;
using chemaxon.marvin.io;

namespace JChemBaseSearch
{

    public static class NetMolImporter
    {
        private static void AddMoleculeToResultDataTable(DataTable targetDataTable, Molecule mol)
        {
            int n = mol.getPropertyCount();

            for (int i = 0; i < n; i++)
            {
                string propertyName = mol.getPropertyKey(i);
                if (!targetDataTable.Columns.Contains(propertyName))
                {
                    targetDataTable.Columns.Add(propertyName);
                }
            }

            targetDataTable.Rows.Add(new object[targetDataTable.Columns.Count]);
            targetDataTable.Rows[targetDataTable.Rows.Count - 1]["Molecule"] = mol;

            for (int i = 0; i < n; i++)
            {
                string propertyName = mol.getPropertyKey(i);
                targetDataTable.Rows[targetDataTable.Rows.Count - 1][propertyName] = MPropHandler.convertToString(mol.properties(), propertyName);
            }
        }

        public static DataTable ImportMolecules(DataTable sourceDataTable, string moleculeColumnName)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("Molecule", typeof(Molecule));

            foreach (DataRow dr in sourceDataTable.Rows)
            {
                Molecule m = null;
                if (dr[moleculeColumnName] is byte[])
                {
                    m = MolImporter.importMol(dr[moleculeColumnName] as byte[]);
                }
                if (dr[moleculeColumnName] is string)
                {
                    m = MolImporter.importMol(dr[moleculeColumnName] as string);
                }
                AddMoleculeToResultDataTable(dt, m);
            }

            return dt;
        }
    }

}