using Grand.Infrastructure.ModelBinding;
using Grand.Infrastructure.Models;
using Microsoft.AspNetCore.Mvc.Rendering;

namespace Grand.Web.Admin.Models.Settings;

public class CatalogSettingsModel : BaseModel
{
    public CatalogSettingsModel()
    {
        DefaultViewModes = new List<SelectListItem>();
        DefaultViewModes.Add(new SelectListItem { Text = "grid", Value = "grid" });
        DefaultViewModes.Add(new SelectListItem { Text = "list", Value = "list" });
    }


    public string ActiveStore { get; set; }


    [GrandResourceDisplayName("Admin.Settings.Catalog.AllowViewUnpublishedProductPage")]
    public bool AllowViewUnpublishedProductPage { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.DisplayDiscontinuedMessageForUnpublishedProducts")]
    public bool DisplayDiscontinuedMessageForUnpublishedProducts { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.ShowSkuOnProductDetailsPage")]
    public bool ShowSkuOnProductDetailsPage { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.ShowSkuOnCatalogPages")]
    public bool ShowSkuOnCatalogPages { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.ShowMpn")]
    public bool ShowMpn { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.ShowGtin")]
    public bool ShowGtin { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.ShowFreeShippingNotification")]
    public bool ShowFreeShippingNotification { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.AllowProductSorting")]
    public bool AllowProductSorting { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.AllowProductViewModeChanging")]
    public bool AllowProductViewModeChanging { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.ShowProductsFromSubcategories")]
    public bool ShowProductsFromSubcategories { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.ShowCategoryProductNumber")]
    public bool ShowCategoryProductNumber { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.ShowCategoryProductNumberIncludingSubcategories")]
    public bool ShowCategoryProductNumberIncludingSubcategories { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.CategoryBreadcrumbEnabled")]
    public bool CategoryBreadcrumbEnabled { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.ShowShareButton")]
    public bool ShowShareButton { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.PageShareCode")]
    public string PageShareCode { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.ProductReviewsMustBeApproved")]
    public bool ProductReviewsMustBeApproved { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.AllowAnonymousUsersToReviewProduct")]
    public bool AllowAnonymousUsersToReviewProduct { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.ProductReviewPossibleOnlyAfterPurchasing")]
    public bool ProductReviewPossibleOnlyAfterPurchasing { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.ProductReviewPossibleOnlyOnce")]
    public bool ProductReviewPossibleOnlyOnce { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.NotifyStoreOwnerAboutNewProductReviews")]
    public bool NotifyStoreOwnerAboutNewProductReviews { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.FilterProductRating")]
    public string FilterProductRating { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.EmailAFriendEnabled")]
    public bool EmailAFriendEnabled { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.AskQuestionOnProduct")]
    public bool AskQuestionOnProduct { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.AllowAnonymousUsersToEmailAFriend")]
    public bool AllowAnonymousUsersToEmailAFriend { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.RecentlyViewedProductsNumber")]
    public int RecentlyViewedProductsNumber { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.RecentlyViewedProductsEnabled")]
    public bool RecentlyViewedProductsEnabled { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.RecommendedProductsEnabled")]
    public bool RecommendedProductsEnabled { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.SuggestedProductsEnabled")]
    public bool SuggestedProductsEnabled { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.SuggestedProductsNumber")]
    public int SuggestedProductsNumber { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.PersonalizedProductsEnabled")]
    public bool PersonalizedProductsEnabled { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.PersonalizedProductsNumber")]
    public int PersonalizedProductsNumber { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.NewProductsNumber")]
    public int NewProductsNumber { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.NewProductsEnabled")]
    public bool NewProductsEnabled { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.NewProductsNumberOnHomePage")]
    public int NewProductsNumberOnHomePage { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.NewProductsOnHomePage")]
    public bool NewProductsOnHomePage { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.CompareProductsEnabled")]
    public bool CompareProductsEnabled { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.ShowBestsellersOnHomepage")]
    public bool ShowBestsellersOnHomepage { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.NumberOfBestsellersOnHomepage")]
    public int NumberOfBestsellersOnHomepage { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.BestsellersFromReports")]
    public bool BestsellersFromReports { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.SearchPageProductsPerPage")]
    public int SearchPageProductsPerPage { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.SearchPageAllowCustomersToSelectPageSize")]
    public bool SearchPageAllowCustomersToSelectPageSize { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.SearchPagePageSizeOptions")]
    public string SearchPagePageSizeOptions { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.ProductSearchAutoCompleteEnabled")]
    public bool ProductSearchAutoCompleteEnabled { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.ProductSearchAutoCompleteNumberOfProducts")]
    public int ProductSearchAutoCompleteNumberOfProducts { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.ShowProductImagesInSearchAutoComplete")]
    public bool ShowProductImagesInSearchAutoComplete { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.ProductSearchTermMinimumLength")]
    public int ProductSearchTermMinimumLength { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.ProductsAlsoPurchasedEnabled")]
    public bool ProductsAlsoPurchasedEnabled { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.ProductsAlsoPurchasedNumber")]
    public int ProductsAlsoPurchasedNumber { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.NumberOfProductTags")]
    public int NumberOfProductTags { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.ProductsByTagPageSize")]
    public int ProductsByTagPageSize { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.ProductsByTagAllowCustomersToSelectPageSize")]
    public bool ProductsByTagAllowCustomersToSelectPageSize { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.ProductsByTagPageSizeOptions")]
    public string ProductsByTagPageSizeOptions { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.IncludeShortDescriptionInCompareProducts")]
    public bool IncludeShortDescriptionInCompareProducts { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.IncludeFullDescriptionInCompareProducts")]
    public bool IncludeFullDescriptionInCompareProducts { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.IgnoreDiscounts")]
    public bool IgnoreDiscounts { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.IgnoreFeaturedProducts")]
    public bool IgnoreFeaturedProducts { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.IgnoreFilterableSpecAttributeOption")]
    public bool IgnoreFilterableSpecAttributeOption { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.IgnoreFilterableAvailableStartEndDateTime")]
    public bool IgnoreFilterableAvailableStartEndDateTime { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.CustomerProductPrice")]
    public bool CustomerProductPrice { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.CollectionsBlockItemsToDisplay")]
    public int CollectionsBlockItemsToDisplay { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.ShowSpecAttributeOnCatalogPages")]
    public bool ShowSpecAttributeOnCatalogPages { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.SecondPictureOnCatalogPages")]
    public bool SecondPictureOnCatalogPages { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.DefaultProductRatingValue")]
    public int DefaultProductRatingValue { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.SearchBySku")]
    public bool SearchBySku { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.SearchByDescription")]
    public bool SearchByDescription { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.SaveSearchAutoComplete")]
    public bool SaveSearchAutoComplete { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.PeriodBestsellers")]
    public int PeriodBestsellers { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.IncludeFeaturedProductsInNormalLists")]
    public bool IncludeFeaturedProductsInNormalLists { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.DisplayTierPricesWithDiscounts")]
    public bool DisplayTierPricesWithDiscounts { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.DisplayQuantityOnCatalogPages")]
    public bool DisplayQuantityOnCatalogPages { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.SortingByAvailability")]
    public bool SortingByAvailability { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.LimitOfFeaturedProducts")]
    public int LimitOfFeaturedProducts { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.NumberOfReview")]
    public int NumberOfReview { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.DefaultViewMode")]
    public string DefaultViewMode { get; set; }

    public IList<SelectListItem> DefaultViewModes { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.DefaultCollectionPageSize")]
    public int DefaultCollectionPageSize { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.MaxCatalogPageSize")]
    public int MaxCatalogPageSize { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.ShowProductsFromSubcategoriesInSearchBox")]
    public bool ShowProductsFromSubcategoriesInSearchBox { get; set; }

    [GrandResourceDisplayName("Admin.Settings.Catalog.PublishBackProductWhenCancellingOrders")]
    public bool PublishBackProductWhenCancellingOrders { get; set; }
}