ClubCatalog.cs

Static catalog of football clubs for a soccer game. Defines a ClubDefinition record with id, name, division and crest asset name, and exposes a fixed array of 140 clubs plus lookup by id and filtering by division.

using System;
using System.Collections.Generic;
using System.Linq;

namespace Socer;

public sealed record ClubDefinition(int Id,string Name,int Division,string Asset)
{
    public string Crest=>$"/crests/{Asset}.png";
}

public static class ClubCatalog
{
    public static readonly ClubDefinition[] All={
        new(0,"FC BARCELUNA",5,"barceluna"),new(1,"MANCASTER UNITED",5,"mancaster"),
        new(2,"ROYAL MADRID",5,"royal-madrid"),new(3,"CHELFORD FC",5,"chelford"),
        new(4,"LIVERPORT FC",5,"liverport"),new(5,"BAVARIA MUNICH",5,"bavaria"),
        new(6,"PARIS SAINT-LUNE",5,"saint-lune"),new(7,"JUVENTRA FC",5,"juventra"),
        new(8,"TOMSK TOMICHI",1,"regional-008"),
        new(9,"OMSK IRTYSHIK",1,"regional-009"),
        new(10,"NOVOSIBIRSK SIBIRYA",1,"regional-010"),
        new(11,"BARNAUL DYNAMIK",1,"regional-011"),
        new(12,"CHITA LOKOMIR",1,"regional-012"),
        new(13,"KEMEROVO KUZBASSIK",1,"regional-013"),
        new(14,"NOVOKUZNETSK METALLIK",1,"regional-014"),
        new(15,"TYUMEN TYUMICHI",1,"regional-015"),
        new(16,"KURGAN TOBOLIK",1,"regional-016"),
        new(17,"CHELYABINSK CHELMET",1,"regional-017"),
        new(18,"MAGNITOGORSK MAGNIT",1,"regional-018"),
        new(19,"ORENBURG ORENFORT",1,"regional-019"),
        new(20,"ULYANOVSK VOLGARA",1,"regional-020"),
        new(21,"SARATOV SOKOLY",1,"regional-021"),
        new(22,"PENZA ZENITRA",1,"regional-022"),
        new(23,"TAMBOV SPARTARA",1,"regional-023"),
        new(24,"LIPETSK METALLUR",1,"regional-024"),
        new(25,"BRYANSK DYNAMIR",1,"regional-025"),
        new(26,"SMOLENSK DNEPRIK",1,"regional-026"),
        new(27,"KOSTROMA SPARTAKHA",1,"regional-027"),
        new(28,"VOLOGDA DYNAMON",1,"regional-028"),
        new(29,"PSKOV PSKOVICH",1,"regional-029"),
        new(30,"VELIKIE LUKI LUKICH",1,"regional-030"),
        new(31,"PETROZAVODSK KARELIA FC",1,"regional-031"),
        new(32,"MURMANSK SEVERIK",1,"regional-032"),
        new(33,"ARKHANGELSK POMOR FC",1,"regional-033"),
        new(34,"IVANOVO TEKSTIL",1,"regional-034"),
        new(35,"KALUGA KALUZH",1,"regional-035"),
        new(36,"TULA ARSENALKA",2,"regional-036"),
        new(37,"KURSK AVANGARDA",2,"regional-037"),
        new(38,"BELGOROD SALYUTIK",2,"regional-038"),
        new(39,"VORONEZH FAKELON",2,"regional-039"),
        new(40,"ASTRAKHAN VOLGARIK",2,"regional-040"),
        new(41,"VOLGOGRAD ROTORIK",2,"regional-041"),
        new(42,"KAMENSK KOMETA",2,"regional-042"),
        new(43,"TAGANROG CHAECHKA",2,"regional-043"),
        new(44,"ROSTOV DONETS FC",2,"regional-044"),
        new(45,"STAVROPOL DYNAMOLET",2,"regional-045"),
        new(46,"NALCHIK SPARTALI",2,"regional-046"),
        new(47,"VLADIKAVKAZ ALANYA FC",2,"regional-047"),
        new(48,"NAZRAN ANGUSHTIK",2,"regional-048"),
        new(49,"MAKHACHKALA ANZHIK",2,"regional-049"),
        new(50,"DERBENT FORTRESS FC",2,"regional-050"),
        new(51,"SOCHI ZHEMCHUZH",2,"regional-051"),
        new(52,"MAYKOP DRUZHINA",2,"regional-052"),
        new(53,"NOVOROSSIYSK CHERNOMIR",2,"regional-053"),
        new(54,"ARMAVIR TORPEDIK",2,"regional-054"),
        new(55,"VLADIVOSTOK LUCHIK",2,"regional-055"),
        new(56,"KHABAROVSK SKA-AMURA",2,"regional-056"),
        new(57,"YUZHNO-SAKHALINSK SAKHALINETS",2,"regional-057"),
        new(58,"YAKUTSK SAKHARA FC",2,"regional-058"),
        new(59,"ULAN-UDE SELENGA FC",2,"regional-059"),
        new(60,"IRKUTSK BAIKALIA FC",2,"regional-060"),
        new(61,"PERM AMKARA",2,"regional-061"),
        new(62,"IZHEVSK ZENITKA",2,"regional-062"),
        new(63,"SARANSK MORDAVA",2,"regional-063"),
        new(64,"YORKMINSTER FC",3,"regional-064"),
        new(65,"CHESTERFORD FC",3,"regional-065"),
        new(66,"DARLINGTON VALE",3,"regional-066"),
        new(67,"HEREFORD BULLS FC",3,"regional-067"),
        new(68,"SCARBOROUGH SEAFARERS",3,"regional-068"),
        new(69,"BOSTON BOROUGH FC",3,"regional-069"),
        new(70,"BLYTH MARINERS FC",3,"regional-070"),
        new(71,"TRURO COAST FC",3,"regional-071"),
        new(72,"BATH SPRINGS FC",3,"regional-072"),
        new(73,"TORQUAY BAY FC",3,"regional-073"),
        new(74,"WOKING CARDINALS FC",3,"regional-074"),
        new(75,"DOVER CLIFF FC",3,"regional-075"),
        new(76,"MAIDENHEAD TOWN FC",3,"regional-076"),
        new(77,"STOCKPORT VALE FC",3,"regional-077"),
        new(78,"ROCHDALE HILLS FC",3,"regional-078"),
        new(79,"OLDHAM OWLETS FC",3,"regional-079"),
        new(80,"SCUNTHORPE STEEL FC",3,"regional-080"),
        new(81,"YEOVIL GREEN FC",3,"regional-081"),
        new(82,"NEWPORT DOCK FC",3,"regional-082"),
        new(83,"WREXHAM VALE FC",3,"regional-083"),
        new(84,"DUNDEE THISTLE FC",3,"regional-084"),
        new(85,"INVERNESS GLEN FC",3,"regional-085"),
        new(86,"AYR COASTAL FC",3,"regional-086"),
        new(87,"SLIGO HARBOURS FC",3,"regional-087"),
        new(88,"GALWAY MARINERS FC",3,"regional-088"),
        new(89,"CORK EMERALD FC",3,"regional-089"),
        new(90,"LIMERICK RIVER FC",3,"regional-090"),
        new(91,"WATERFORD QUAYS FC",3,"regional-091"),
        new(92,"ROUEN DRAGONS FC",4,"regional-092"),
        new(93,"DIJON MUSTARD FC",4,"regional-093"),
        new(94,"NIMES CROCODILES FC",4,"regional-094"),
        new(95,"NANCY LORRAINE FC",4,"regional-095"),
        new(96,"METZELLE FC",4,"regional-096"),
        new(97,"AUXERRE ABBEY FC",4,"regional-097"),
        new(98,"SOCHAUX LIONS FC",4,"regional-098"),
        new(99,"TROYES AUBE FC",4,"regional-099"),
        new(100,"BASTIA CORSICA FC",4,"regional-100"),
        new(101,"AJACCIO MOUNTAIN FC",4,"regional-101"),
        new(102,"PAU PYRENEES FC",4,"regional-102"),
        new(103,"GRENOBLE ALPS FC",4,"regional-103"),
        new(104,"OSNABRUCK VIOLET FC",4,"regional-104"),
        new(105,"AUE MINERS FC",4,"regional-105"),
        new(106,"ZWICKAU SWANS FC",4,"regional-106"),
        new(107,"CHEMNITZ SKY FC",4,"regional-107"),
        new(108,"JENA ZEISSIK FC",4,"regional-108"),
        new(109,"HALLE RED FC",4,"regional-109"),
        new(110,"ERFURT ROTSTADT FC",4,"regional-110"),
        new(111,"COTTBUS ENERGIA FC",4,"regional-111"),
        new(112,"LUBECK GREEN FC",4,"regional-112"),
        new(113,"OLDENBURG BLUE FC",4,"regional-113"),
        new(114,"TRIESTE ALABARDA FC",4,"regional-114"),
        new(115,"PADOVA CROSS FC",4,"regional-115"),
        new(116,"VICENZA STRIPES FC",4,"regional-116"),
        new(117,"ANCONA ADRIATIC FC",4,"regional-117"),
        new(118,"PERUGIA GRIFFINS FC",4,"regional-118"),
        new(119,"PESCARA DOLPHINS FC",4,"regional-119"),
        new(120,"ATHLETICO MADRIVA",5,"regional-120"),
        new(121,"SEVILLONA FC",5,"regional-121"),
        new(122,"VALENTIA BATS FC",5,"regional-122"),
        new(123,"VILLAROSA FC",5,"regional-123"),
        new(124,"REAL BETIRA FC",5,"regional-124"),
        new(125,"REAL SOCIERA FC",5,"regional-125"),
        new(126,"ATHLETIC BILBORA",5,"regional-126"),
        new(127,"FC PORTORA",5,"regional-127"),
        new(128,"BENFIRA LISBON",5,"regional-128"),
        new(129,"SPORTING LISBONA",5,"regional-129"),
        new(130,"AJAXA AMSTERDAM",5,"regional-130"),
        new(131,"PSV EINDHORST",5,"regional-131"),
        new(132,"FEYENORA ROTTERDAM",5,"regional-132"),
        new(133,"CELTARA GLASGOW",5,"regional-133"),
        new(134,"RANGERFORD FC",5,"regional-134"),
        new(135,"GALATARAY ISTANBUL",5,"regional-135"),
        new(136,"FENERBAHARA SK",5,"regional-136"),
        new(137,"BESIKTARA JK",5,"regional-137"),
        new(138,"ZENITRA PETERSBURG",5,"regional-138"),
        new(139,"SPARTARA MOSCOW",5,"regional-139"),
    };
    public static ClubDefinition Get(int id)=>All[Math.Clamp(id,0,All.Length-1)];
    public static IEnumerable<ClubDefinition> Pool(int division)=>All.Where(c=>c.Id!=0 && c.Division==division);
}