// 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 System.Runtime.InteropServices;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp.Formatting;
using Microsoft.CodeAnalysis.Options;
using Microsoft.VisualStudio.LanguageServices.Implementation.Options;

namespace Microsoft.VisualStudio.LanguageServices.CSharp.Options;

[ComVisible(true)]
public sealed partial class AutomationObject : AbstractAutomationObject
{
    internal AutomationObject(ILegacyGlobalOptionService legacyGlobalOptions)
        : base(legacyGlobalOptions, LanguageNames.CSharp)
    {
    }

    private int GetBooleanOption(Option2<bool> option)
        => GetOption(option) ? 1 : 0;

    private int GetBooleanOption(PerLanguageOption2<bool> option)
        => GetOption(option) ? 1 : 0;

    private int GetBooleanOption(Option2<NewLineBeforeOpenBracePlacement> option, NewLineBeforeOpenBracePlacement flag)
        => GetOption(option).HasFlag(flag) ? 1 : 0;

    private int GetBooleanOption(Option2<SpacePlacementWithinParentheses> option, SpacePlacementWithinParentheses flag)
        => GetOption(option).HasFlag(flag) ? 1 : 0;

    private void SetBooleanOption(Option2<bool> option, int value)
        => SetOption(option, value != 0);

    private void SetBooleanOption(PerLanguageOption2<bool> option, int value)
        => SetOption(option, value != 0);

    private void SetBooleanOption(Option2<NewLineBeforeOpenBracePlacement> option, NewLineBeforeOpenBracePlacement flag, int value)
        => SetOption(option, GetOption(option).WithFlagValue(flag, value != 0));

    private void SetBooleanOption(Option2<SpacePlacementWithinParentheses> option, SpacePlacementWithinParentheses flag, int value)
        => SetOption(option, GetOption(option).WithFlagValue(flag, value != 0));
}
