using System;
using System.Collections;
using System.Collections.Generic;
using ChemAxon.NET.IKVM.IO;
using ChemAxon.NET.IKVM.Chemistry;
using ChemAxon.NET.API;
using ChemAxon.NET.API.IO;

namespace ChemAxon.NET.UnitTest.API.Examples.IO.Clipboard
{

    public class ClipboardExample
    {
        public void CopyMolecules_To_Clipboard_Example()
        {
            var molecules = new List<IJChemMolecule>();
            molecules.Add(MainFactory.Chemistry.CreateMolecule("benzene"));
            molecules.Add(MainFactory.Chemistry.CreateMolecule("methylpropane"));
            molecules.Add(MainFactory.Chemistry.CreateMolecule("hexane"));

            IClipboardHandler clipboard = MainFactory.IO.OpenClipboard();
            clipboard.CopyTo(molecules);
        }

        public void PasteMolecules_From_Clipboard_Example()
        {
            IClipboardHandler clipboard = MainFactory.IO.OpenClipboard();

            IEnumerable<IJChemMolecule> molecules;
            bool isMoleculeOnClipboard = clipboard.PasteFrom(out molecules);

            if (isMoleculeOnClipboard)
            {
                Console.WriteLine("Molecules from clipboard:");

                foreach (IJChemMolecule molecule in molecules)
                    Console.WriteLine(molecule.Formula);
            }
            else
                Console.WriteLine("There is no molecule on the clipboard!");
        }

        public void Copy_Mixed_Date_To_Clipboard_Example()
        {
            IClipboardHandler clipboard = MainFactory.IO.OpenClipboard();

            IClipboardTable clipboardData = clipboard.CreateClipboardTable(3, 2);
            clipboardData[0, 0].Data.SetValue(MainFactory.Chemistry.CreateMolecule("benzene"));
            clipboardData[1,1].Data.SetValue("Comment 1");
            clipboardData[2, 0].Data.SetValue(MainFactory.Chemistry.CreateMolecule("methylpropane"));
            clipboardData[0, 1].Data.SetValue("Comment 2");
            clipboardData[1,0].Data.SetValue("Comment 3");
            clipboardData[2, 1].Data.SetValue(MainFactory.Chemistry.CreateMolecule("hexane"));

            clipboard.CopyTo(clipboardData);
        }

        public void Paste_Mixed_Data_From_Clipboard_Example()
        {
            IClipboardHandler clipboard = MainFactory.IO.OpenClipboard();

            IClipboardTable clipboardData;
            bool isMixedDataOnClipboard = clipboard.PasteFrom(out clipboardData);

            if (isMixedDataOnClipboard)
            {
                Console.WriteLine("Mixed data from clipboard:");

                for (int row = 0; row < clipboardData.RowCount; row++)
                {
                    for (int column = 0; column < clipboardData.ColumnCount; column++)
                    {
                        if (clipboardData[row, column].Data.DataType == DataType.Molecule)
                        {
                            IJChemMolecule molecule = clipboardData[row, column].Data.Value as IJChemMolecule;
                            Console.Write(string.Format("\t{0}", molecule.Formula));
                        }
                        else
                        {
                            object data = clipboardData[row, column].Data.Value;
                            Console.Write(string.Format("\t{0}", data));
                        }
                    }

                    Console.WriteLine();
                }
            }
            else
                Console.WriteLine("There is no molecule on the clipboard!");
        }
    }

}