namespace Nop.Web.Framework.Mvc.Routing;

/// <summary>
/// Represents default values related to routing
/// </summary>
public static partial class NopRoutingDefaults
{
    #region Route names

    public static partial class RouteName
    {
        public static partial class Generic
        {
            /// <summary>
            /// Gets the generic route name
            /// </summary>
            public static string GenericUrl => "GenericUrl";

            /// <summary>
            /// Gets the generic route (with language code e.g. en/) name
            /// </summary>
            public static string GenericUrlWithLanguageCode => "GenericUrlWithLanguageCode";

            /// <summary>
            /// Gets the generic catalog route (with language code e.g. en/) name
            /// </summary>
            public static string GenericCatalogUrl => "GenericCatalogUrl";

            /// <summary>
            /// Gets the generic catalog route name 
            /// </summary>
            public static string GenericCatalogUrlWithLanguageCode => "GenericCatalogUrlWithLanguageCode";

            /// <summary>
            /// Gets the generic product catalog route name
            /// </summary>
            public static string ProductCatalog => "ProductCatalog";

            /// <summary>
            /// Gets the generic product route name
            /// </summary>
            public static string Product => "ProductDetails";

            /// <summary>
            /// Gets the generic category route name
            /// </summary>
            public static string Category => "Category";

            /// <summary>
            /// Gets the generic manufacturer route name
            /// </summary>
            public static string Manufacturer => "Manufacturer";

            /// <summary>
            /// Gets the generic vendor route name
            /// </summary>
            public static string Vendor => "Vendor";

            /// <summary>
            /// Gets the generic news item route name
            /// </summary>
            public static string NewsItem => "NewsItem";

            /// <summary>
            /// Gets the generic blog post route name
            /// </summary>
            public static string BlogPost => "BlogPost";

            /// <summary>
            /// Gets the generic topic route name
            /// </summary>
            public static string Topic => "TopicDetails";

            /// <summary>
            /// Gets the generic product tag route name
            /// </summary>
            public static string ProductTag => "ProductsByTag";
        }
    }

    #endregion

    #region Route values keys

    public static partial class RouteValue
    {
        /// <summary>
        /// Gets default key for action route value
        /// </summary>
        public static string Action => "action";

        /// <summary>
        /// Gets default key for controller route value
        /// </summary>
        public static string Controller => "controller";

        /// <summary>
        /// Gets default key for permanent redirect route value
        /// </summary>
        public static string PermanentRedirect => "permanentRedirect";

        /// <summary>
        /// Gets default key for url route value
        /// </summary>
        public static string Url => "url";

        /// <summary>
        /// Gets default key for blogpost id route value
        /// </summary>
        public static string BlogPostId => "blogpostId";

        /// <summary>
        /// Gets default key for category id route value
        /// </summary>
        public static string CategoryId => "categoryid";

        /// <summary>
        /// Gets default key for manufacturer id route value
        /// </summary>
        public static string ManufacturerId => "manufacturerid";

        /// <summary>
        /// Gets default key for newsitem id route value
        /// </summary>
        public static string NewsItemId => "newsitemId";

        /// <summary>
        /// Gets default key for product id route value
        /// </summary>
        public static string ProductId => "productid";

        /// <summary>
        /// Gets default key for product tag id route value
        /// </summary>
        public static string ProductTagId => "productTagId";

        /// <summary>
        /// Gets default key for topic id route value
        /// </summary>
        public static string TopicId => "topicid";

        /// <summary>
        /// Gets default key for vendor id route value
        /// </summary>
        public static string VendorId => "vendorid";

        /// <summary>
        /// Gets language route value
        /// </summary>
        public static string Language => "language";

        /// <summary>
        /// Gets default key for se name route value
        /// </summary>
        public static string SeName => "SeName";

        /// <summary>
        /// Gets default key for catalog route value
        /// </summary>
        public static string CatalogSeName => "CatalogSeName";
    }

    #endregion

    /// <summary>
    /// Gets language parameter transformer
    /// </summary>
    public static string LanguageParameterTransformer => "lang";
}