#if ARENDI
using Arendi.BleLibrary;
using Arendi.BleLibrary.Adapter;
using Arendi.BleLibrary.Local;
using Arendi.BleLibrary.Remote;
#endif
using System;
using System.Collections.Generic;
using System.Text;

namespace TINK.Services.BluetoothLock.Arendi
{
#if ARENDI
    public class Central : ICentral
#else
    public class Central 
#endif
    {
#if ARENDI
        private bool disposedValue;

        public IAdapter Adapter => throw new NotImplementedException();

        public BluetoothState BluetoothState => throw new NotImplementedException();

        public ISecurityManager SecurityManager => throw new NotImplementedException();

        public IBondManager BondManager => throw new NotImplementedException();

        public IDictionary<string, string> SystemInformation => throw new NotImplementedException();

        public event EventHandler<PeripheralDiscoveredEventArgs> PeripheralDiscovered;
        public event EventHandler<BluetoothStateChangedEventArgs> BluetoothStateChanged;
        public event EventHandler<EventArgs> SystemInformationUpdated;
        public event EventHandler<FatalErrorEventArgs> FatalError;

        public IPeripheral CreatePeripheralByUuid(Uuid uuid, string name = null)
        {
            throw new NotImplementedException();
        }

        public bool IsEnabled()
        {
            throw new NotImplementedException();
        }

        public void StartScan()
        {
            throw new NotImplementedException();
        }

        public void StartScan(string[] uuids)
        {
            throw new NotImplementedException();
        }

        public void StartScan(Uuid[] uuids)
        {
            throw new NotImplementedException();
        }

        public void StopScan()
        {
            throw new NotImplementedException();
        }

        protected virtual void Dispose(bool disposing)
        {
            if (!disposedValue)
            {
                if (disposing)
                {
                    // TODO: dispose managed state (managed objects)
                }

                // TODO: free unmanaged resources (unmanaged objects) and override finalizer
                // TODO: set large fields to null
                disposedValue = true;
            }
        }

        // // TODO: override finalizer only if 'Dispose(bool disposing)' has code to free unmanaged resources
        // ~Central()
        // {
        //     // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method
        //     Dispose(disposing: false);
        // }

        public void Dispose()
        {
            // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method
            Dispose(disposing: true);
            GC.SuppressFinalize(this);
        }
#endif
    }
}