XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
namespace XFEEDToolBox.Core.Galaxy;

/// <summary>Actual original UID/name bindings; observed market IDs never resolve a UID.</summary>
public static class GalaxyOriginalCommodities
{
    public static GalaxyNativeCommodityOption? Resolve(IReadOnlyList<GalaxyNativeCommodityOption> options,uint uid)=>options.FirstOrDefault(c=>c.Uid==uid);
    public static GalaxyFilterChoice Choice(GalaxyNativeCommodityOption original)
    {
        var key=GalaxyMapFilter.Normalize(original.Name);
        // A symbol/name alias may provide a display name, never a UID or parent.
        var observed=GalaxyCommodityTree.Definitions.FirstOrDefault(d=>GalaxyMapFilter.Normalize(d.Symbol)==key||GalaxyMapFilter.Normalize(d.Name)==key);
        return new(GalaxyMapFilter.Normalize(observed?.Name??original.Name),observed?.Name??original.Name);
    }
    public static GalaxyCommodityDirection? SingleDirectionFromSavedPriceMode(int mode)=>mode switch{1=>GalaxyCommodityDirection.Imports,2=>GalaxyCommodityDirection.Exports,_=>null};
    public static GalaxyCommodityDirection? DirectionFromSavedPriceMode(int mode)=>mode switch{0 or 3=>GalaxyCommodityDirection.Both,_=>SingleDirectionFromSavedPriceMode(mode)};
    public static GalaxyMapFilter WithOptions(GalaxyMapFilter filter,IReadOnlyList<GalaxyNativeCommodityOption> options)
    {
        var same=filter.OriginalCommodityOptions.SequenceEqual(options);var result=same?filter:filter with{OriginalCommodityOptions=options};
        if(filter.OriginalCommodityUid is not {} uid||Resolve(options,uid) is not {} selected)return result;
        // A real definition may currently fail the original cargo predicate.
        // Keep the pending UID, but never restore it as an available choice.
        var values=selected.PublisherEligible==false?new HashSet<string>(StringComparer.Ordinal):new HashSet<string>([Choice(selected).Key],StringComparer.Ordinal);
        if(result.SavedValues.TryGetValue(GalaxyFilterCategory.Commodity,out var saved)&&saved?.SetEquals(values)==true&&
           (result.Category!=GalaxyFilterCategory.Commodity||result.Values?.SetEquals(values)==true))return result;
        var selections=new Dictionary<GalaxyFilterCategory,IReadOnlySet<string>?>(result.SavedValues){[GalaxyFilterCategory.Commodity]=values};
        return result with{SavedValues=selections,Values=result.Category==GalaxyFilterCategory.Commodity?values:result.Values};
    }
    public static bool TrySavedUid(string value,out uint uid)
    {
        if(int.TryParse(value,System.Globalization.NumberStyles.Integer,System.Globalization.CultureInfo.InvariantCulture,out var signed)){uid=unchecked((uint)signed);return uid!=uint.MaxValue;}
        return uint.TryParse(value,System.Globalization.NumberStyles.None,System.Globalization.CultureInfo.InvariantCulture,out uid)&&uid!=uint.MaxValue;
    }
}