using Ryujinx.Common.Logging;
using Ryujinx.HLE.HOS.Ipc;
using Ryujinx.HLE.HOS.Kernel.Threading;
using Ryujinx.Horizon.Common;
using System;

namespace Ryujinx.HLE.HOS.Services.Notification
{
    class INotificationSystemEventAccessor : IpcService
    {

        private readonly KEvent _getNotificationSendingNotifierEvent;
        private int _getNotificationSendingNotifierEventHandle;
        public INotificationSystemEventAccessor(ServiceCtx context) { }

        [CommandCmif(0)] // 9.0.0+
        // GetNotificationSendingNotifier() -> nn::notification::server::INotificationSystemEventAccessor
        public ResultCode GetSystemEvent(ServiceCtx context)
        {
            if (_getNotificationSendingNotifierEventHandle == 0)
            {
                if (context.Process.HandleTable.GenerateHandle(_getNotificationSendingNotifierEvent.ReadableEvent, out _getNotificationSendingNotifierEventHandle) != Result.Success)
                {
                    throw new InvalidOperationException("Out of handles!");
                }
            }

            context.Response.HandleDesc = IpcHandleDesc.MakeCopy(_getNotificationSendingNotifierEventHandle);
            return ResultCode.Success;
        }
    }
}
