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

using System;

#nullable disable

namespace Microsoft.Build.Framework
{
    /// <summary>
    ///     Context used by an <see cref="SdkResolver" /> to resolve an SDK.
    /// </summary>
    public abstract class SdkResolverContext
    {
        /// <summary>
        /// Gets a value indicating if the resolver is allowed to be interactive.
        /// </summary>
        public virtual bool Interactive { get; protected set; }

        /// <summary>
        /// Gets a value indicating if the resolver is running in Visual Studio.
        /// </summary>
        public virtual bool IsRunningInVisualStudio { get; protected set; }

        /// <summary>
        ///     Logger to log real-time messages back to MSBuild.
        /// </summary>
        public virtual SdkLogger Logger { get; protected set; }

        /// <summary>
        ///     Path to the project file being built.
        /// </summary>
        public virtual string ProjectFilePath { get; protected set; }

        /// <summary>
        ///     Path to the solution file being built, if known. May be null.
        /// </summary>
        public virtual string SolutionFilePath { get; protected set; }

        /// <summary>
        ///     Version of MSBuild currently running.
        /// </summary>
        /// <remarks>
        ///    <format type="text/markdown"><![CDATA[
        /// ## Remarks
        ///     
        /// File version is informational and not equal to the assembly version.
        /// ]]></format>
        /// </remarks>
        public virtual Version MSBuildVersion { get; protected set; }

        /// <summary>
        ///     Gets or sets any custom state for current build.  This allows resolvers to maintain state between resolutions.
        ///     This property is not thread-safe.
        /// </summary>
        public virtual object State { get; set; }
    }
}
