// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using System.ComponentModel;
using System.Windows.Forms;
using Windows.Win32;
using Windows.Win32.Foundation;
using Windows.Win32.UI.WindowsAndMessaging;

namespace System;

/// <summary>
///  Helper class to host dialogs for testing.
///  This class is typically passed as a parameter to a call to <see cref="CommonDialog.ShowDialog(IWin32Window?)"/>.
/// </summary>
[DesignerCategory("Default")]
internal class DialogHostForm : Form
{
    protected override void WndProc(ref Message m)
    {
        if (m.MsgInternal == PInvokeCore.WM_ENTERIDLE && m.WParamInternal == (uint)MSGF.DIALOGBOX)
        {
            OnDialogIdle((HWND)m.LParamInternal);
        }

        base.WndProc(ref m);
    }

    protected virtual void OnDialogIdle(HWND dialogHandle)
    {
        PInvokeCore.PostMessage(dialogHandle, PInvokeCore.WM_CLOSE);
    }

    protected static unsafe void Accept(HWND handle)
    {
        PInvokeCore.SendMessage(handle, PInvokeCore.WM_COMMAND, (WPARAM)(nint)MESSAGEBOX_RESULT.IDOK);
    }
}
