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

namespace Grand.Web.Models.Catalog;

public class SearchModel : BaseModel
{
    public string Warning { get; set; }

    public bool NoResults { get; set; }

    public string SearchCategoryId { get; set; }

    /// <summary>
    ///     Query string
    /// </summary>
    [GrandResourceDisplayName("Search.SearchTerm")]
    public string q { get; set; }

    /// <summary>
    ///     Category ID
    /// </summary>
    [GrandResourceDisplayName("Search.Category")]
    public string cid { get; set; }

    [GrandResourceDisplayName("Search.IncludeSubCategories")]
    public bool isc { get; set; }

    /// <summary>
    ///     Collection ID
    /// </summary>
    [GrandResourceDisplayName("Search.Collection")]
    public string mid { get; set; }

    /// <summary>
    ///     Vendor ID
    /// </summary>
    [GrandResourceDisplayName("Search.Vendor")]
    public string vid { get; set; }

    /// <summary>
    ///     Price - From
    /// </summary>
    [GrandResourceDisplayName("Search.PriceRange.From")]
    public string pf { get; set; }

    /// <summary>
    ///     Price - To
    /// </summary>
    [GrandResourceDisplayName("Search.PriceRange.To")]
    public string pt { get; set; }

    /// <summary>
    ///     A value indicating whether to search in descriptions
    /// </summary>
    [GrandResourceDisplayName("Search.SearchInDescriptions")]
    public bool sid { get; set; }

    /// <summary>
    ///     A value indicating whether "advanced search" is enabled
    /// </summary>
    [GrandResourceDisplayName("Search.AdvancedSearch")]
    public bool adv { get; set; }

    /// <summary>
    ///     A value indicating whether "allow search by vendor" is enabled
    /// </summary>
    public bool asv { get; set; }

    public bool Box { get; set; }

    public IList<SelectListItem> AvailableCategories { get; set; } = new List<SelectListItem>();
    public IList<SelectListItem> AvailableCollections { get; set; } = new List<SelectListItem>();
    public IList<SelectListItem> AvailableVendors { get; set; } = new List<SelectListItem>();

    public CatalogPagingFilteringModel PagingFilteringContext { get; set; } = new();
    public IList<ProductOverviewModel> Products { get; set; } = new List<ProductOverviewModel>();

    #region Nested classes

    public class CategoryModel : BaseEntityModel
    {
        public string Breadcrumb { get; set; }
    }

    #endregion
}