using NFC;
using NFC.Readers.PCSC;
using NUnit.Framework;
using System;

namespace NFC_Real_Test
{
    [TestFixture, Explicit]
    public class REAL_Reader_PCSC
    {
        /// <summary>
        /// Print PCSC ReaderIDs to Console Out
        /// </summary>
        [Test]
        public void GetReaders()
        {
            IHardware hardware = new PCSC_Hardware();
            string[] readers = hardware.GetReaders();

            Console.WriteLine("PCSC Readers detected: {0}", readers.Length);

            if (readers.Length > 0)
            {
                Console.WriteLine("List of ReaderIDs:");
                foreach (string readerID in readers)
                {
                    Console.WriteLine("{0}", readerID);
                }
            }
        }

        /// <summary>
        /// Connect to specific PCSC Reader by ReaderID
        /// </summary>
        /// <param name="readerID">ReaderID from GetReaders</param>
        [TestCase("ACS ACR122U PICC Interface 0")]
        public void Connect(string readerID)
        {
            IHardware hardware = new PCSC_Hardware();
            IReader reader = hardware.OpenReader(readerID);

            bool connected_successfully = false;

            ReaderEventHandler handler = (sender, card) =>
            {
                card.Connect();

                connected_successfully = true;

                card.Disconnect();
            };

            reader.CardDiscovered += handler;
            reader.Start();

            Assert.AreEqual(true, connected_successfully);

            reader.Stop();
            reader.CardDiscovered -= handler;
        }
    }
}