// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System;
using Microsoft.AspNetCore.Mvc.ActionConstraints;

namespace VersioningWebSite
{
    public class VersionAttribute : Attribute, IActionConstraintFactory
    {
        private int? _maxVersion;
        private int? _minVersion;
        private int? _order;

        public int MinVersion
        {
            get { return _minVersion ?? -1; }
            set { _minVersion = value; }
        }

        public int MaxVersion
        {
            get { return _maxVersion ?? -1; }
            set { _maxVersion = value; }
        }

        public int Order
        {
            get { return _order ?? -1; }
            set { _order = value; }
        }

        public bool IsReusable => true;

        public IActionConstraint CreateInstance(IServiceProvider services)
        {
            return new VersionRangeValidator(_minVersion, _maxVersion) { Order = _order ?? 0 };
        }
    }
}