public IEnumerable <UgcMarketItem> FindItems(List <string> categories, GenderFlag genderFlag, JobFlag job, string searchString)
    {
        List <UgcMarketItem> items = new();

        foreach (UgcMarketItem item in Items.Values)
        {
            if (!categories.Contains(item.Item.Category) && categories.Count > 0)
            {
                continue;
            }

            if (item.Status != UgcMarketListingStatus.Active)
            {
                continue;
            }

            if (!item.Item.Ugc.Name.ToLower().Contains(searchString) && !item.Tags.Contains(searchString))
            {
                continue;
            }

            // Check items tags if any tags have the searched string
            bool validTag = false;
            foreach (string tag in item.Tags)
            {
                if (tag.ToLower().Contains(searchString.ToLower()))
                {
                    validTag = true;
                }
            }

            if (!validTag)
            {
                continue;
            }

            // check job
            if (!JobHelper.CheckJobFlagForJob(item.Item.RecommendJobs, job))
            {
                continue;
            }

            // check gender
            if (!MeretMarketHelper.CheckGender(genderFlag, item.Item.Id))
            {
                continue;
            }

            items.Add(item);
        }

        return(items);
    }
    public IEnumerable <PremiumMarketItem> FindAllByCategory(MeretMarketSection section, MeretMarketCategory category, GenderFlag gender, JobFlag jobFlag, string searchString)
    {
        List <PremiumMarketItem> items   = new();
        IEnumerable <dynamic>    results = QueryFactory.Query(TableName).Get();

        if (section != MeretMarketSection.All)
        {
            results = QueryFactory.Query(TableName).Where("section", (int)section).Get();
        }

        foreach (dynamic data in results)
        {
            if (category != MeretMarketCategory.None && (MeretMarketCategory)data.category != category)
            {
                continue;
            }

            if (data.parent_market_id != 0)
            {
                continue;
            }
            PremiumMarketItem meretMarketItem = ReadMeretMarketItem(data);

            if (!meretMarketItem.ItemName.ToLower().Contains(searchString.ToLower()))
            {
                continue;
            }

            List <Job> jobs = ItemMetadataStorage.GetRecommendJobs(meretMarketItem.ItemId);
            if (!JobHelper.CheckJobFlagForJob(jobs, jobFlag))
            {
                continue;
            }

            if (!MeretMarketHelper.CheckGender(gender, meretMarketItem.ItemId))
            {
                continue;
            }

            if (meretMarketItem.BannerId != 0)
            {
                meretMarketItem.Banner = DatabaseManager.Banners.FindById(meretMarketItem.BannerId);
            }

            items.Add(meretMarketItem);
        }

        return(items);
    }