namespace BlueLaminate.Scraper.Skins; /// A single CS2 skin from the CSGO-API static catalogue (skins.json). /// Stable catalogue id, e.g. "skin-e757fd7191f9". Globally unique natural key. /// Owning weapon, e.g. "AK-47", "Hand Wraps", "Bayonet". /// CS weapon definition index (weapon.weapon_id), e.g. AK-47=7. Null if absent. /// Paint index identifying the finish, e.g. 985. Null if absent. /// Weapon category, e.g. "Rifles", "Knives", "Gloves". Becomes the weapon type. /// "CT", "T", or "Both". /// Skin/pattern name, e.g. "Dragon Lore"; "Vanilla" for knives with no finish. /// Rarity tier, e.g. "Covert", "Classified", "Extraordinary". /// Flavour/description text, or null. /// Catalogue image URL, or null. /// True if a StatTrak variant exists. /// True if a Souvenir variant exists. /// Minimum wear value, or null when the catalogue gives none (e.g. vanilla knives). /// Maximum wear value, or null. /// Collections and containers this skin belongs to. public sealed record CatalogSkin( string Id, string WeaponName, int? DefIndex, int? PaintIndex, string Category, string Team, string Name, string Rarity, string? Description, string? ImageUrl, bool StatTrakAvailable, bool SouvenirAvailable, decimal? FloatMin, decimal? FloatMax, IReadOnlyList Sources); /// A collection or container a skin originates from. /// Stable catalogue id, e.g. "collection-set-community-37" or "crate-4288". Natural key. /// Display name, e.g. "The Dead Hand Collection", "Glove Case". /// "Collection" or "Container". public sealed record CatalogSource(string Id, string Name, string Type);