using Predictalytics.Domain.Enums; namespace Predictalytics.Infrastructure.Helpers; public static class MarketCategoryMapper { public static (MarketCategory Category, string Subcategory) Map(string rawCategory, string tags) { var searchString = $"{rawCategory} {tags}".ToLowerInvariant(); if (searchString.Contains("politic") || searchString.Contains("election") || searchString.Contains("trump") || searchString.Contains("biden")) return (MarketCategory.Politics, GetSubcategory(rawCategory, tags, "Elections")); if (searchString.Contains("crypto") || searchString.Contains("bitcoin") || searchString.Contains("eth") || searchString.Contains("solana")) return (MarketCategory.Crypto, GetSubcategory(rawCategory, tags, "Crypto")); if (searchString.Contains("sport") || searchString.Contains("nfl") || searchString.Contains("nba") || searchString.Contains("soccer") || searchString.Contains("tennis")) return (MarketCategory.Sports, GetSubcategory(rawCategory, tags, "Sports")); if (searchString.Contains("pop") || searchString.Contains("culture") || searchString.Contains("movie") || searchString.Contains("oscars") || searchString.Contains("music")) return (MarketCategory.PopCulture, GetSubcategory(rawCategory, tags, "Pop Culture")); if (searchString.Contains("science") || searchString.Contains("space") || searchString.Contains("weather") || searchString.Contains("climate")) return (MarketCategory.Science, GetSubcategory(rawCategory, tags, "Science")); if (searchString.Contains("news") || searchString.Contains("global") || searchString.Contains("world")) return (MarketCategory.GlobalNews, GetSubcategory(rawCategory, tags, "Global News")); if (searchString.Contains("economy") || searchString.Contains("finance") || searchString.Contains("business") || searchString.Contains("fed")) return (MarketCategory.Economy, GetSubcategory(rawCategory, tags, "Economy")); return (MarketCategory.Other, GetSubcategory(rawCategory, tags, "Other")); } private static string GetSubcategory(string rawCategory, string tags, string fallback) { if (!string.IsNullOrWhiteSpace(rawCategory) && !rawCategory.Equals("OVERALL", StringComparison.OrdinalIgnoreCase)) return rawCategory; var firstTag = tags.Split(',', StringSplitOptions.RemoveEmptyEntries).FirstOrDefault()?.Trim(); if (!string.IsNullOrWhiteSpace(firstTag)) return firstTag; return fallback; } }