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

using System.Collections;
using Microsoft.AspNetCore.Mvc.ApplicationModels;
using Microsoft.AspNetCore.Mvc.Infrastructure;

namespace Microsoft.AspNetCore.Mvc.RazorPages;

/// <summary>
/// Provides configuration for Razor Pages.
/// </summary>
public class RazorPagesOptions : IEnumerable<ICompatibilitySwitch>
{
    private readonly IReadOnlyList<ICompatibilitySwitch> _switches = Array.Empty<ICompatibilitySwitch>();
    private string _root = "/Pages";

    /// <summary>
    /// Gets a collection of <see cref="IPageConvention"/> instances that are applied during
    /// route and page model construction.
    /// </summary>
    public PageConventionCollection Conventions { get; internal set; } = new();

    /// <summary>
    /// Application relative path used as the root of discovery for Razor Page files.
    /// Defaults to the <c>/Pages</c> directory under application root.
    /// </summary>
    public string RootDirectory
    {
        get => _root;
        set
        {
            ArgumentException.ThrowIfNullOrEmpty(value);

            if (value[0] != '/')
            {
                throw new ArgumentException(Resources.PathMustBeRootRelativePath, nameof(value));
            }

            _root = value;
        }
    }

    IEnumerator<ICompatibilitySwitch> IEnumerable<ICompatibilitySwitch>.GetEnumerator() => _switches.GetEnumerator();

    IEnumerator IEnumerable.GetEnumerator() => _switches.GetEnumerator();
}
