using XFEEDToolBox.Core.Models;
using XFEEDToolBox.Core.Data;
namespace XFEEDToolBox.Core.Planning;
/// <summary>Empty optional fields never become exact empty-string filters.</summary>
public static class TradeSearchConstraints
{
public static string[] ParseCommodityFilter(string? text)=>NormalizeCommodityFilter((text??"").Split([',',',',';',';','\r','\n'],StringSplitOptions.TrimEntries|StringSplitOptions.RemoveEmptyEntries));
public static string[] NormalizeCommodityFilter(IEnumerable<string>? values)=>(values??[])
.Select(CommodityCatalog.SelectionKey).Where(key=>!string.IsNullOrWhiteSpace(key)).Distinct(StringComparer.Ordinal).ToArray();
private static bool Text(string? requested,string actual)=>string.IsNullOrWhiteSpace(requested)||actual.Equals(requested.Trim(),StringComparison.OrdinalIgnoreCase);
public static bool SourceAllows(Station station,PlannerRequest request)
=>(request.SourceMarketIdFilter is not {} id||station.MarketId==id)
&&Text(request.SourceSystemFilter,station.SystemName)&&Text(request.SourceStationFilter,station.Name);
public static bool DestinationAllows(Station station,PlannerRequest request)
=>(request.DestinationMarketIdFilter is not {} id||station.MarketId==id)
&&Text(request.DestinationSystemFilter,station.SystemName)&&Text(request.DestinationStationFilter,station.Name);
}
using XFEEDToolBox.Core.Models;
using XFEEDToolBox.Core.Data;
namespace XFEEDToolBox.Core.Planning;
/// <summary>Empty optional fields never become exact empty-string filters.</summary>
public static class TradeSearchConstraints
{
public static string[] ParseCommodityFilter(string? text)=>NormalizeCommodityFilter((text??"").Split([',',',',';',';','\r','\n'],StringSplitOptions.TrimEntries|StringSplitOptions.RemoveEmptyEntries));
public static string[] NormalizeCommodityFilter(IEnumerable<string>? values)=>(values??[])
.Select(CommodityCatalog.SelectionKey).Where(key=>!string.IsNullOrWhiteSpace(key)).Distinct(StringComparer.Ordinal).ToArray();
private static bool Text(string? requested,string actual)=>string.IsNullOrWhiteSpace(requested)||actual.Equals(requested.Trim(),StringComparison.OrdinalIgnoreCase);
public static bool SourceAllows(Station station,PlannerRequest request)
=>(request.SourceMarketIdFilter is not {} id||station.MarketId==id)
&&Text(request.SourceSystemFilter,station.SystemName)&&Text(request.SourceStationFilter,station.Name);
public static bool DestinationAllows(Station station,PlannerRequest request)
=>(request.DestinationMarketIdFilter is not {} id||station.MarketId==id)
&&Text(request.DestinationSystemFilter,station.SystemName)&&Text(request.DestinationStationFilter,station.Name);
}