﻿// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.

using Microsoft.VisualStudio.InteractiveWindow;
using Microsoft.VisualStudio.LanguageServices.CSharp.Interactive;

namespace Microsoft.VisualStudio.IntegrationTest.Utilities.InProcess
{
    internal class CSharpInteractiveWindow_InProc : InteractiveWindow_InProc
    {
        private const string ViewCommand = "View.C#Interactive";

        private CSharpInteractiveWindow_InProc()
            : base(ViewCommand, CSharpVsInteractiveWindowPackage.Id)
        {
        }

        public static CSharpInteractiveWindow_InProc Create()
            => new CSharpInteractiveWindow_InProc();

        protected override IInteractiveWindow AcquireInteractiveWindow()
            => InvokeOnUIThread(cancellationToken =>
            {
                var componentModel = GetComponentModel();
                var vsInteractiveWindowProvider = componentModel.GetService<CSharpVsInteractiveWindowProvider>();
                var vsInteractiveWindow = vsInteractiveWindowProvider.Open(instanceId: 0, focus: true);

                return vsInteractiveWindow.InteractiveWindow;
            });
    }
}
