using Microsoft.CommandPalette.Extensions;
using Shmuelie.WinRTServer.CsWinRT;

namespace Olive;

public class Program
{
  [MTAThread]
  public static void Main(string[] args)
  {
    if (args.Length > 0 && args[0] == "-RegisterProcessAsComServer")
    {
      Shmuelie.WinRTServer.ComServer server = new();

      ManualResetEvent extensionDisposedEvent = new(false);

      // We are instantiating an extension instance once above, and returning it every time the callback in RegisterExtension below is called.
      // This makes sure that only one instance of SampleExtension is alive, which is returned every time the host asks for the IExtension object.
      // If you want to instantiate a new instance each time the host asks, create the new instance inside the delegate.
      OliveExtension extensionInstance = new(extensionDisposedEvent);
      server.RegisterClass<OliveExtension, IExtension>(() => extensionInstance);
      server.Start();

      // This will make the main thread wait until the event is signalled by the extension class.
      // Since we have single instance of the extension object, we exit as soon as it is disposed.
      extensionDisposedEvent.WaitOne();
      server.Stop();
      server.UnsafeDispose();
    }
    else
    {
      System.Windows.Forms.MessageBox.Show(
        "Olive is a PowerToys Command Palette extension.\n\nOpen PowerToys Command Palette, then launch 'Olive GIF Picker' to search and copy GIFs.",
        "Olive",
        System.Windows.Forms.MessageBoxButtons.OK,
        System.Windows.Forms.MessageBoxIcon.Information);
    }
  }
}
