using System;
using System.Runtime.InteropServices;
using TINK.Model.Device;
using Xamarin.Essentials;

[assembly: Xamarin.Forms.Dependency(typeof(TINK.iOS.Device.Device))]
namespace TINK.iOS.Device
{
    public class Device : ISmartDevice
    {
        [DllImport("/System/Library/Frameworks/IOKit.framework/IOKit")]
        private static extern uint IOServiceGetMatchingService(uint masterPort, IntPtr matching);

        [DllImport("/System/Library/Frameworks/IOKit.framework/IOKit")]
        private static extern IntPtr IOServiceMatching(string s);

        [DllImport("/System/Library/Frameworks/IOKit.framework/IOKit")]
        private static extern IntPtr IORegistryEntryCreateCFProperty(uint entry, IntPtr key, IntPtr allocator, uint options);

        [DllImport("/System/Library/Frameworks/IOKit.framework/IOKit")]
        private static extern int IOObjectRelease(uint o);

        public string Manufacturer => DeviceInfo.Manufacturer;

        public string Model => DeviceInfo.Model;

        public string PlatformText => DeviceInfo.Platform.ToString();

        public string VersionText => DeviceInfo.VersionString;
        /// <summary> Gets unitque device identifier. </summary>
        /// <returns>Gets the identifies specifying device.</returns>
        public string Identifier
            => UIKit.UIDevice.CurrentDevice?.IdentifierForVendor?.AsString() ?? string.Empty;
     }
}