using PCSC;
using PCSC.Iso7816;
using System;

namespace NFC.Readers.PCSC
{

    public class PCSC_Reader : IReader, IDisposable
    {
        private string _ReaderID;
        private IContextFactory _ContextFactory;
        private ISCardContext _SCardContext;
        private IsoReader _ISOReader;
        private ICard _Card;

        public PCSC_Reader(string readerID)
        {
            _ReaderID = readerID;
        }

        public event ReaderEventHandler CardDiscovered;
        public event ReaderEventHandler CardLost;

        public void Dispose()
        {
            Stop();
        }

        public void Start()
        {
            _ContextFactory = ContextFactory.Instance;
            _SCardContext = _ContextFactory.Establish(SCardScope.System);
            
            _ISOReader = new IsoReader(_SCardContext);

            _Card = new Card(_ISOReader, _ReaderID);

            CardDiscovered?.Invoke(this, _Card);
        }

        public void Stop()
        {
            CardLost?.Invoke(this, _Card);

            _ISOReader.Dispose();
            _SCardContext.Dispose();
        }
    }
}