{"version":3,"file":"ngx-sport.mjs","sources":["../../src/against/result.ts","../../src/against/side.ts","../../src/association.ts","../../src/association/mapper.ts","../../src/identifiable.ts","../../src/category.ts","../../src/category/map.ts","../../src/competitor/startLocation.ts","../../src/place/location.ts","../../src/qualify/target.ts","../../src/structure/location.ts","../../src/place.ts","../../src/game/state.ts","../../src/poule.ts","../../src/qualify/pathNode.ts","../../src/planning/gameMode.ts","../../src/sport/variant.ts","../../src/sport/variant/allInOneGame.ts","../../src/poule/structure.ts","../../src/poule/structure/balanced.ts","../../src/qualify/distribution.ts","../../src/qualify/rule.ts","../../src/qualify/rule/horizontal.ts","../../src/qualify/rule/horizontal/single.ts","../../src/poule/structure/balancedCreator.ts","../../src/structure/placeRanges.ts","../../src/competition/sport/getter.ts","../../src/qualify/group.ts","../../src/qualify/fromPoulePicker.ts","../../src/qualify/mapping.ts","../../src/qualify/mapping/byPlace.ts","../../src/qualify/possibleFromMap.ts","../../src/qualify/rule/horizontal/multiple.ts","../../src/qualify/rule/creator/horizontal.ts","../../src/qualify/mapping/byRank.ts","../../src/qualify/rule/vertical.ts","../../src/qualify/rule/vertical/multiple.ts","../../src/qualify/rule/vertical/single.ts","../../src/qualify/rule/creator/vertical.ts","../../src/qualify/rule/creator.ts","../../src/structure/cell.ts","../../src/structure/cell/mapper.ts","../../src/qualify/group/mapper.ts","../../src/poule/horizontal.ts","../../src/poule/horizontal/creator.ts","../../src/place/mapper.ts","../../src/poule/mapper.ts","../../src/score/direction.ts","../../src/score/config.ts","../../src/score/config/mapper.ts","../../src/qualify/againstConfig.ts","../../src/qualify/againstConfig/mapper.ts","../../src/round/mapper.ts","../../src/category/mapper.ts","../../src/common/enumReflection.ts","../../src/ranking/againstRuleSet.ts","../../src/competition.ts","../../src/league.ts","../../src/league/mapper.ts","../../src/period.ts","../../src/season.ts","../../src/season/mapper.ts","../../src/referee.ts","../../src/referee/mapper.ts","../../src/competition/sport.ts","../../src/sport/variant/against.ts","../../src/sport/variant/against/gamesPerPlace.ts","../../src/sport/variant/against/h2h.ts","../../src/sport/variant/single.ts","../../src/sport.ts","../../src/sport/mapper.ts","../../src/field.ts","../../src/field/mapper.ts","../../src/competition/sport/mapper.ts","../../src/competitor.ts","../../src/competitor/team.ts","../../src/team.ts","../../src/team/mapper.ts","../../src/competitor/team/mapper.ts","../../src/competition/mapper.ts","../../src/planning/gameAmountConfig.ts","../../src/score/againstHelper.ts","../../src/score/config/service.ts","../../src/planning/gameAmountConfig/service.ts","../../src/qualify/againstConfig/service.ts","../../src/competition/sport/editor.ts","../../src/competitor/startLocation/map.ts","../../src/console/ansiColor.ts","../../src/formation.ts","../../src/formation/line.ts","../../src/formation/mapper.ts","../../src/game.ts","../../src/game/against.ts","../../src/game/order.ts","../../src/game/getter.ts","../../src/game/together.ts","../../src/game/place.ts","../../src/game/place/against.ts","../../src/game/place/together.ts","../../src/score.ts","../../src/score/against.ts","../../src/score/together.ts","../../src/score/mapper.ts","../../src/game/place/mapper.ts","../../src/qualify/pathNode/mapper.ts","../../src/structure/location/mapper.ts","../../src/game/mapper.ts","../../src/game/phase.ts","../../src/planning/editMode.ts","../../src/planning/strategy.ts","../../src/ranking/pointsCalculation.ts","../../src/sport/football.ts","../../src/ranking/rule.ts","../../src/ranking/rule/getter.ts","../../src/nameService.ts","../../src/person.ts","../../src/team/player.ts","../../src/team/player/mapper.ts","../../src/person/mapper.ts","../../src/planning/mapper.ts","../../src/referee/self.ts","../../src/planning/config.ts","../../src/planning/config/mapper.ts","../../src/planning/gameAmountConfig/mapper.ts","../../src/place/performance.ts","../../src/place/sportPerformance.ts","../../src/place/sportPerformance/calculator.ts","../../src/place/sportPerformance/calculator/against.ts","../../src/ranking/functionMapCreator.ts","../../src/ranking/item/round/sport.ts","../../src/ranking/calculator/round/sport.ts","../../src/ranking/calculator/round/sport/against.ts","../../src/poule/against.ts","../../src/qualify/reservationservice.ts","../../src/ranking/item/round.ts","../../src/ranking/calculator/cumulative.ts","../../src/place/sportPerformance/calculator/together.ts","../../src/ranking/calculator/round/sport/together.ts","../../src/ranking/calculator/round.ts","../../src/qualify/service.ts","../../src/ranking/item/end.ts","../../src/ranking/calculator/end.ts","../../src/round/number.ts","../../src/round/number/mapper.ts","../../src/sport/variant/withFields.ts","../../src/math.ts","../../src/sport/variant/withPoule/againstGamePerPlace.ts","../../src/sport/variant/withPoule/equallyAssignCalculator.ts","../../src/structure.ts","../../src/poule/structure/balancedMinimum.ts","../../src/structure/removalValidator.ts","../../src/structure/editor.ts","../../src/structure/mapper.ts","../../src/qualify/roundRankCalculator.ts","../../src/structure/pouleStructureNumberMap.ts","../../src/structure/nameService.ts","../../src/ngx-sport.module.ts","../../public-api.ts","../../ngx-sport.ts"],"sourcesContent":["export enum AgainstResult { \n    Win = 'win', \n    Draw = 'draw', \n    Loss = 'loss' \n}","export enum AgainstSide { Home = 'home', Away = 'away' }","import { Competitor } from './competitor';\nimport { Team } from './team';\n\nexport class Association {\n    static readonly MIN_LENGTH_NAME = 2;\n    static readonly MAX_LENGTH_NAME = 20;\n    static readonly MAX_LENGTH_DESCRIPTION = 50;\n\n    protected id: string | number = 0;\n    protected description: string | undefined;\n    protected parent: Association | undefined;\n    protected children: Association[] = [];\n    protected teams: Team[] = [];\n    // fix\n\n    constructor(protected name: string, parent?: Association) {\n        if (parent !== undefined) {\n            this.setParent(parent);\n        }\n    }\n\n    getId(): string | number {\n        return this.id;\n    }\n\n    setId(id: string | number): void {\n        this.id = id;\n    }\n\n    getName(): string {\n        return this.name;\n    }\n\n    setName(name: string): void {\n        this.name = name;\n    }\n\n    getDescription(): string | undefined {\n        return this.description;\n    }\n\n    setDescription(description: string | undefined): void {\n        this.description = description;\n    }\n\n    getParent(): Association | undefined {\n        return this.parent;\n    }\n\n    setParent(parent: Association): void {\n        if (this.parent === parent || this === parent) {\n            return;\n        }\n        if (this.parent !== undefined) {\n            const index = this.parent.getChildren().indexOf(this);\n            if (index > -1) {\n                this.parent.getChildren().splice(index, 1);\n            }\n        }\n        this.parent = parent;\n        this.parent.getChildren().push(this);\n    }\n\n    getAncestors(ancestors: Association[] = []): Association[] {\n        const parent = this.getParent();\n        if (parent === undefined) {\n            return ancestors;\n        }\n        ancestors.push(parent);\n        return parent.getAncestors(ancestors);\n    }\n\n    getChildren(): Association[] {\n        return this.children;\n    }\n\n    getTeams(): Team[] {\n        return this.teams;\n    }\n}\n","import { Association } from '../association';\nimport { Injectable } from '@angular/core';\nimport { JsonAssociation } from './json';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class AssociationMapper {\n\n    protected cache: AssociationMap = {};\n\n    constructor() { }\n\n    toObject(json: JsonAssociation, disableCache?: boolean): Association {\n        let association;\n        if (disableCache !== true) {\n            association = this.cache[json.id];\n        }\n        if (association === undefined) {\n            association = new Association(json.name);\n            association.setId(json.id);\n            this.cache[association.getId()] = association;\n        }\n        association.setDescription(json.description);\n        if (json.parent !== undefined) {\n            association.setParent(this.toObject(json.parent, disableCache));\n        }\n        return association;\n    }\n\n    updateObject(json: JsonAssociation, association: Association) {\n        json.description ? association.setDescription(json.description) : undefined;\n        const parent = association.getParent();\n        if (json.parent && parent) {\n            this.updateObject(json.parent, parent);\n        }\n    }\n\n    toJson(association: Association): JsonAssociation {\n        const parent = association.getParent();\n        return {\n            id: association.getId(),\n            name: association.getName(),\n            description: association.getDescription(),\n            parent: parent ? this.toJson(parent) : undefined\n        };\n    }\n}\n\ninterface AssociationMap {\n    [key: string]: Association;\n}","\nexport class Identifiable {\n    protected id: string | number = 0;\n    getId(): string | number {\n        return this.id;\n    }\n\n    setId(id: string | number): void {\n        this.id = id;\n    }\n}\n","import { Identifiable } from './identifiable';\nimport { Competition } from './competition';\nimport { Round } from './qualify/group';\nimport { StructureCell } from './structure/cell';\nimport { RoundNumber } from './round/number';\n\nexport class Category extends Identifiable {\n\n    public static readonly DefaultName = 'standaard';\n    protected structureCells: StructureCell[] = [];\n    protected abbreviation: string|undefined;\n\n    constructor(\n        protected competition: Competition,\n        protected name: string,\n        private number: number) {\n        super();\n\n    }\n\n    getName(): string {\n        return this.name;\n    }\n\n    setName(name: string): void {\n        this.name = name;\n    }\n\n    getAbbreviation(): string|undefined {\n        return this.abbreviation;\n    }\n\n    setAbbreviation(abbreviation: string|undefined): void {\n        this.abbreviation = abbreviation;\n    }\n\n    getNumber(): number {\n        return this.number;\n    }\n\n    setNumber(number: number): void {\n        this.number = number;\n    }\n\n    getStructureCells(): StructureCell[] {\n        return this.structureCells;\n    }\n\n    getFirstStructureCell(): StructureCell {\n        return this.getStructureCellByValue(1);\n    }\n\n    getStructureCell(roundNumber: RoundNumber): StructureCell {\n        return this.getStructureCellByValue(roundNumber.getNumber());\n    }\n\n    protected getStructureCellByValue(roundNumber: number): StructureCell {\n        const structureCell = this.getStructureCells().find((structureCell: StructureCell): boolean => {\n            return structureCell.getRoundNumber().getNumber() === roundNumber;\n        });\n        if (structureCell === undefined) {\n            throw new Error('de structuurcel kan niet gevonden worden');\n        }\n        return structureCell;\n    }\n\n    getRootRound(): Round {\n        const structureCell = this.getStructureCellByValue(1);\n        const rounds = structureCell.getRounds();\n        if (rounds.length !== 1) {\n            throw new Error('there must be 1 rootRound');\n\n        }\n        return rounds[0];\n    }\n}","import { Category } from \"../category\";\n\nexport class CategoryMap extends Map<number, Category> {\n\n    constructor(categories: Category[]) {\n        super();\n        categories.forEach(category => {\n            this.set(category.getNumber(), category);\n        });\n    }\n}","export class StartLocation {\n    public constructor(\n        protected categoryNr: number, protected pouleNr: number, protected placeNr: number\n    ) { }\n\n    public getCategoryNr(): number {\n        return this.categoryNr;\n    }\n\n    public getPouleNr(): number {\n        return this.pouleNr;\n    }\n\n    public getPlaceNr(): number {\n        return this.placeNr;\n    }\n\n    public getStartId(): string {\n        return this.getCategoryNr() + '.' + this.getPouleNr() + '.' + this.getPlaceNr();\n    }\n\n    public equals(startLocation: StartLocation): boolean {\n        return startLocation.getCategoryNr() === this.getCategoryNr()\n            && startLocation.getPouleNr() === this.getPouleNr()\n            && startLocation.getPlaceNr() === this.getPlaceNr();\n    }\n}\n","export class PlaceLocation {\n    public constructor(\n        protected pouleNr: number, protected placeNr: number\n    ) { }\n\n    getPouleNr(): number {\n        return this.pouleNr;\n    }\n\n    getPlaceNr(): number {\n        return this.placeNr;\n    }\n\n    getRoundLocationId(): string {\n        return this.getPouleNr() + '.' + this.getPlaceNr();\n    }\n}\n","export enum QualifyTarget {\n    Winners = 'W',\n    Dropouts = '',\n    Losers = 'L'\n}","import { PlaceLocation } from \"../place/location\";\nimport { QualifyPathNode } from \"../qualify/pathNode\";\n\nexport class StructureLocation {\n    \n    constructor(\n        private categoryNr: number,\n        private pathNode: QualifyPathNode,\n        private placeLocation: PlaceLocation) { }\n\n    getCategoryNr(): number {\n        return this.categoryNr\n    }\n\n    getPathNode(): QualifyPathNode {\n        return this.pathNode\n    }\n\n    getPlaceLocation(): PlaceLocation {\n        return this.placeLocation\n    }\n\n    toString(): string {\n        return this.categoryNr + '.' + \n            this.pathNode.pathToString() + '.' + \n            this.placeLocation.getRoundLocationId();\n    }\n}","import { StartLocation } from './competitor/startLocation';\nimport { PlaceLocation } from './place/location';\nimport { Poule } from './poule';\nimport { HorizontalPoule } from './poule/horizontal';\nimport { Round } from './qualify/group';\nimport { QualifyTarget } from './qualify/target';\nimport { StructureLocation } from './structure/location';\n\nexport class Place extends PlaceLocation {\n    protected id: number = 0;\n    protected structureNumber: number = 0;\n    protected extraPoints = 0;\n    protected qualifiedPlace: Place | undefined;\n\n    constructor(protected poule: Poule, number?: number) {\n        super(poule.getNumber(), number === undefined ? poule.getPlaces().length + 1 : number);\n        this.poule.getPlaces().push(this);\n    }\n\n    getId(): number {\n        return this.id;\n    }\n\n    setId(id: number): void {\n        this.id = id;\n    }\n\n    getPoule(): Poule {\n        return this.poule;\n    }\n\n    getRound(): Round {\n        return this.getPoule().getRound();\n    }\n\n    getRoundNodeName(): string {\n        return this.getRound().getPathNode().pathToString();\n    }\n\n    getStructureLocation(): StructureLocation {\n        return new StructureLocation(\n            this.poule.getRound().getCategory().getNumber(),\n            this.poule.getRound().getPathNode(),\n            new PlaceLocation(this.pouleNr, this.placeNr)\n        );\n    }\n\n    private getHorizontalNumber(qualifyTarget: QualifyTarget): number {\n        if (qualifyTarget === QualifyTarget.Winners) {\n            return this.getPlaceNr();\n        }\n        return this.getPoule().getPlaces().length + 1 - this.getPlaceNr();\n    }\n\n    getHorizontalPoule(qualifyTarget: QualifyTarget): HorizontalPoule {\n        return this.getRound().getHorizontalPoule(qualifyTarget, this.getHorizontalNumber(qualifyTarget));\n    }\n\n    getExtraPoints(): number {\n        return this.extraPoints;\n    }\n\n    setExtraPoints(extraPoints: number) {\n        this.extraPoints = extraPoints;\n    }\n\n    getQualifiedPlace(): Place | undefined {\n        return this.qualifiedPlace;\n    }\n\n    setQualifiedPlace(place: Place | undefined): void {\n        this.qualifiedPlace = place;\n    }\n\n    getStartLocation(): StartLocation | undefined {\n        if (this.qualifiedPlace !== undefined) {\n            return this.qualifiedPlace.getStartLocation();\n        }\n        if (this.getRound().isRoot()) {\n            return new StartLocation(this.getRound().getCategory().getNumber(), this.getPouleNr(), this.getPlaceNr());\n        }\n        return undefined;\n    }\n}\n","export enum GameState {\n    Created = 'created',\n    InProgress = 'inProgress',\n    Finished = 'finished',\n    Canceled = 'canceled'\n}\n","import { Competition } from './competition';\nimport { StartLocation } from './competitor/startLocation';\nimport { Game } from './game';\nimport { AgainstGame } from './game/against';\nimport { GameState } from './game/state';\nimport { TogetherGame } from './game/together';\nimport { Identifiable } from './identifiable';\nimport { Place } from './place';\nimport { Round } from './qualify/group';\n\nexport class Poule extends Identifiable {\n    protected number: number;\n    protected name: string | undefined;\n    protected places: Place[] = [];\n    protected againstGames: AgainstGame[] = [];\n    protected togetherGames: TogetherGame[] = [];\n    protected categoryLocation: string | undefined;\n\n    constructor(protected round: Round, number?: number) {\n        super();\n        this.round.getPoules().push(this);\n        this.number = number ? number : (round.getPoules().length);\n    }\n\n    getRound(): Round {\n        return this.round;\n    }\n\n    getCompetition(): Competition {\n        return this.getRound().getCompetition();\n    }\n\n    getNumber(): number {\n        return this.number;\n    }\n\n    getName(): string | undefined {\n        return this.name;\n    }\n\n    setName(name: string | undefined): void {\n        this.name = name;\n    }\n\n    getPlaces(): Place[] {\n        return this.places;\n    }\n\n    getPlace(number: number): Place {\n        const place = this.getPlaces().find(place => place.getPlaceNr() === number);\n        if (place === undefined) {\n            throw Error('de pouleplek kan niet gevonden worden');\n        }\n        return place;\n    }\n\n    getGames(): (AgainstGame | TogetherGame)[] {\n        return (<(AgainstGame | TogetherGame)[]>this.againstGames).concat(this.togetherGames);\n    }\n\n    getAgainstGames(place?: Place): AgainstGame[] {\n        if (place === undefined) {\n            return this.againstGames;\n        }\n        return this.againstGames.filter((gameIt: AgainstGame) => {\n            return gameIt.isParticipating(place);\n        });\n    }\n\n    getTogetherGames(): TogetherGame[] {\n        return this.togetherGames;\n    }\n\n    getNrOfGames(): number {\n        return this.getAgainstGames().length + this.getTogetherGames().length;\n    }\n\n    getCategoryLocation(): string {\n        if (this.categoryLocation === undefined) {\n            this.categoryLocation = this.round.getPathNode().pathToString() + '.' + this.number;\n        }\n        return this.categoryLocation;\n    }\n\n    getStructureLocation(): string {\n        return this.round.getCategory().getNumber() + '.' + this.getCategoryLocation();\n    }\n\n    // getTogetherGamePlaces(place?: Place): TogetherGamePlace[] {\n    //     let gamePlaces: TogetherGamePlace[] = []\n    //     this.togetherGames.forEach((game: TogetherGame) => {\n    //         const gamePlacesTmp = game.getTogetherPlaces();\n    //         if (place === undefined) {\n    //             gamePlaces = gamePlaces.concat(game.getTogetherPlaces());\n    //         } else {\n    //             gamePlaces = gamePlaces.concat(\n    //                 game.getTogetherPlaces().filter((gamePlace: TogetherGamePlace) => gamePlace.getPlace() === place)\n    //             );\n    //         }\n    //     });\n    //     return gamePlaces;\n    // }\n\n    getGamesState(): GameState {\n        const games = this.getGames();\n        if (games.length > 0 && games.every((game: AgainstGame | TogetherGame) => game.getState() === GameState.Finished)) {\n            return GameState.Finished;\n        } else if (games.some((game: Game) => game.getState() !== GameState.Created)) {\n            return GameState.InProgress;\n        }\n        return GameState.Created;\n    }\n\n    needsRanking(): boolean {\n        return (this.getPlaces().length > 2);\n    }\n\n    next(): Poule {\n        const poules = this.getRound().getPoules();\n        return poules[this.getNumber()];\n    }\n\n    detach() {\n        const round = this.getRound();\n        const poules = round.getPoules();\n        poules.splice(poules.length - 1, 1);\n        if (poules.length === 0) {\n            round.getParentQualifyGroup()?.detach();\n        }\n    }\n\n    public getPlaceByStartLocation(startLocation: StartLocation): Place | undefined {\n        return this.getPlaces().find((place: Place): boolean => {\n            return place.getStartLocation()?.equals(startLocation);\n        });\n    }\n}\n","import { QualifyTarget } from \"./target\";\n\nexport class QualifyPathNode {\n    // private next: QualifyPathNode | undefined;\n\n    constructor(private qualifyTarget: QualifyTarget | undefined, private qualifyGroupNumber: number, private previous?: QualifyPathNode) {\n        \n    }\n\n    createNext(qualifyTarget: QualifyTarget, qualifyGroupNumber: number): QualifyPathNode {\n        const path = new QualifyPathNode(qualifyTarget, qualifyGroupNumber, this);\n        // this.next = path;\n        return path;\n    }\n\n    getPrevious(): QualifyPathNode|undefined {\n        return this.previous;\n    }\n\n    hasPrevious(): boolean {\n        return this.previous !== undefined;\n    }\n\n    getQualifyTarget(): QualifyTarget|undefined {\n        return this.qualifyTarget;\n    }\n\n    getQualifyGroupNumber(): number {\n        return this.qualifyGroupNumber;\n    }\n\n    pathToString(): string {\n        if (this.previous === undefined) {\n            return this.nodeToString();\n        }\n        return this.previous.pathToString() + this.nodeToString();\n    }\n\n    protected nodeToString(): string {\n        return this.qualifyTargetToString() + this.qualifyGroupNumber;\n    }\n\n    protected qualifyTargetToString(): string {\n        return this.qualifyTarget ?? '';\n    }\n\n    getLevel(): number {\n        return this.previous ? this.previous.getLevel() + 1 : 1;\n    }\n}","export enum GameMode { Single = 'single', Against = 'against', AllInOneGame = 'allInOneGame' }","import { Identifiable } from \"../identifiable\";\nimport { GameMode } from \"../planning/gameMode\";\nimport { Sport } from \"../sport\";\n\nexport class SportVariant extends Identifiable {\n    constructor(protected sport: Sport, protected gameMode: GameMode) {\n        super();\n    }\n\n    getSport(): Sport {\n        return this.sport;\n    }\n\n    getGameMode(): GameMode {\n        return this.gameMode;\n\n    }\n}","import { GameMode } from \"../../planning/gameMode\";\nimport { Sport } from \"../../sport\";\nimport { SportVariant } from \"../variant\";\n\nexport class AllInOneGame extends SportVariant {\n    constructor(sport: Sport, protected nrOfGamesPerPlace: number) {\n        super(sport, GameMode.AllInOneGame);\n    }\n\n    getNrOfGamesPerPlace(): number {\n        return this.nrOfGamesPerPlace;\n    }\n}","import { AgainstGpp } from \"../sport/variant/against/gamesPerPlace\";\nimport { AgainstH2h } from \"../sport/variant/against/h2h\";\nimport { AllInOneGame } from \"../sport/variant/allInOneGame\";\nimport { Single } from \"../sport/variant/single\";\n\nexport class PouleStructure extends Array<number> {\n\n    constructor(...nrOfPlaces: number[]) {\n        super();\n        for (let nrOfPlacesIt of nrOfPlaces) {\n            this.push(nrOfPlacesIt);\n        }\n        this.sort((nrOfPlacesPouleA: number, nrOfPlacesPouleB: number): number => {\n            return nrOfPlacesPouleA > nrOfPlacesPouleB ? -1 : 1;\n        });\n    }\n\n    public getNrOfPoules(): number {\n        return this.length;\n    }\n\n    public getNrOfPlaces(): number {\n        return this.reduce((accumulator, currentValue) => accumulator + currentValue);\n    }\n\n    public getBiggestPoule(): number {\n        return this[0];\n    }\n\n    public getSmallestPoule(): number {\n        return this[this.length - 1];\n    }\n\n    public isBalanced(): boolean {\n        return this.getBiggestPoule() === this.getSmallestPoule();\n    }\n\n    public isSelfRefereeAvailable(sportVariants: (Single | AgainstH2h | AgainstGpp | AllInOneGame)[]): boolean {\n        return this.isSelfRefereeSamePouleAvailable(sportVariants)\n            || this.isSelfRefereeOtherPoulesAvailable();\n    }\n\n    public isSelfRefereeOtherPoulesAvailable(): boolean {\n        return this.getNrOfPoules() > 1;\n    }\n\n    public isSelfRefereeSamePouleAvailable(sportVariants: (Single | AgainstH2h | AgainstGpp | AllInOneGame)[]): boolean {\n        return sportVariants.every((sportVariant: Single | AgainstH2h | AgainstGpp | AllInOneGame) => {\n            if (sportVariant instanceof AllInOneGame) {\n                return false;\n            }\n            return sportVariant.getNrOfGamePlaces() < this.getSmallestPoule();\n        });\n    }\n}","import { PouleStructure } from \"../structure\";\n\nexport class BalancedPouleStructure extends PouleStructure {\n    constructor(...nrOfPlaces: number[]) {\n        super(...nrOfPlaces);\n        if (this.getBiggestPoule() - this.getSmallestPoule() > 1) {\n            throw new Error('this poulestructure is not balanced');\n        }\n    }\n\n    public getFirstLesserNrOfPlacesPouleNr(): number {\n        const leastNrOfPlaces = this.getSmallestPoule();\n        return this.indexOf(leastNrOfPlaces) + 1;\n    }\n\n    public getLastGreaterNrOfPlacesPouleNr(): number {\n        const greatestNrOfPlaces = this.getBiggestPoule();\n        return this.lastIndexOf(greatestNrOfPlaces) + 1;\n    }\n\n    public removePoule(): BalancedPouleStructure {\n        if (this.length <= 1) {\n            throw Error('not enough poules');\n        }\n        const poules = this.slice();\n        poules.pop();\n        return new BalancedPouleStructure(...poules);\n    }\n}","export enum QualifyDistribution {\n    HorizontalSnake = 'horizontalSnake', Vertical = 'vertical'\n}","import { HorizontalPoule } from \"../poule/horizontal\";\nimport { Round } from \"./group\";\nimport { QualifyTarget } from \"./target\";\n\nexport class QualifyRule {\n    constructor(protected fromHorizontalPoule: HorizontalPoule) {\n    }\n\n    getQualifyTarget(): QualifyTarget {\n        return this.fromHorizontalPoule.getQualifyTarget();\n    }\n\n    getFromHorizontalPoule(): HorizontalPoule {\n        return this.fromHorizontalPoule;\n    }\n\n    getRank(): number {\n        return this.fromHorizontalPoule.getAbsoluteNumber();\n    }\n\n    getFromRound(): Round {\n        return this.fromHorizontalPoule.getRound();\n    }\n}","import { HorizontalPoule } from '../../poule/horizontal';\nimport { Round } from '../group';\nimport { QualifyRule } from '../rule';\nimport { QualifyTarget } from '../target';\n\nexport abstract class HorizontalQualifyRule extends QualifyRule{\n    constructor(fromHorizontalPoule: HorizontalPoule) {\n        super(fromHorizontalPoule);\n    }\n}\n\n","\nimport { QualifyMappingByPlace } from \"../../mapping/byPlace\";\nimport { HorizontalQualifyRule } from \"../horizontal\";\nimport { HorizontalPoule } from \"../../../poule/horizontal\";\nimport { QualifyGroup } from \"../../group\";\nimport { Place } from \"../../../place\";\nimport { QualifyTarget } from \"../../target\";\n\n\nexport class HorizontalSingleQualifyRule extends HorizontalQualifyRule {\n\n    private next: HorizontalSingleQualifyRule | undefined;\n\n    constructor(\n        fromHorizontalPoule: HorizontalPoule,\n        group: QualifyGroup,\n        private byPlaceMappings: QualifyMappingByPlace[],\n        private previous: HorizontalSingleQualifyRule | undefined) {\n        super(fromHorizontalPoule/*, group*/);\n        this.fromHorizontalPoule.setQualifyRuleNew(this);\n        if (this.previous !== undefined) {\n            this.previous.setNext(this);\n        } else {\n            group.setFirstSingleRule(this);\n        }\n    }\n\n    getMappings(): QualifyMappingByPlace[] {\n        return this.byPlaceMappings;\n    }\n\n    getMappingByFromPlace(fromPlace: Place): QualifyMappingByPlace | undefined {\n        return this.getMappings().find((byPlaceMapping: QualifyMappingByPlace): boolean => {\n            return byPlaceMapping.getFromPlace() === fromPlace;\n        });\n    }\n\n    getMappingByToPlace(toPlace: Place): QualifyMappingByPlace|undefined {\n        return this.getMappings().find((byPlaceMapping: QualifyMappingByPlace): boolean => {\n            return byPlaceMapping.getToPlace() === toPlace;\n        });\n    }\n    \n    getNrOfMappings(): number {\n        return this.byPlaceMappings.length;\n    }\n\n    // public getNrOfDropouts(): number {\n    //     return this.fromHorizontalPoule.getPlaces().length - this.getNrOfToPlaces();\n    // }\n\n    getPrevious(): HorizontalSingleQualifyRule | undefined {\n        return this.previous;\n    }\n\n    setNext(next: HorizontalSingleQualifyRule | undefined): void {\n        this.next = next;\n    }\n\n    getNext(): HorizontalSingleQualifyRule | undefined {\n        return this.next;\n    }\n\n    setPrevious(previous: HorizontalSingleQualifyRule | undefined): void {\n        this.previous = previous;\n    }\n\n    getNeighbour(targetSide: QualifyTarget): HorizontalSingleQualifyRule | undefined {\n        return targetSide === QualifyTarget.Winners ? this.previous : this.next;\n    }\n\n    getFirst(): HorizontalSingleQualifyRule {\n        const previous = this.getPrevious();\n        if (previous !== undefined) {\n            return previous.getFirst();\n        }\n        return this;\n    }\n\n    getLast(): HorizontalSingleQualifyRule {\n        const next = this.getNext();\n        if (next !== undefined) {\n            return next.getLast();\n        }\n        return this;\n    }\n\n    getNrOfToPlacesTargetSide(targetSide: QualifyTarget): number {\n        let nrOfToPlacesTargetSide = 0;\n        let neighBour: HorizontalSingleQualifyRule | undefined = this.getNeighbour(targetSide);\n        if (neighBour === undefined) {\n            return nrOfToPlacesTargetSide;\n        }\n        return neighBour.getNrOfMappings() + neighBour.getNrOfToPlacesTargetSide(targetSide);\n    }\n\n    detach() {\n        const next = this.getNext();\n        if (next !== undefined) {\n            next.detach();\n            this.setNext(undefined);\n        }\n        this.getFromHorizontalPoule().setQualifyRuleNew(undefined);\n        this.setPrevious(undefined);\n    }\n\n    getGroup(): QualifyGroup {\n        const target = this.getQualifyTarget();\n        const firstSingleRule = this.getFirst()\n        const qualifGroup = this.getFromRound().getQualifyGroups(target).find((qualifyGroup: QualifyGroup) => {\n            return firstSingleRule === qualifyGroup.getFirstSingleRule();\n        });\n        if (qualifGroup === undefined) {\n            throw Error('voor de single-kwalificatieregel kan geen groep worden gevonden');\n        }\n        return qualifGroup;\n    }\n}\n\n","import { BalancedPouleStructure } from \"./balanced\";\n\nexport class BalancedPouleStructureCreator {\n    create(nrOfPlaces: number, nrOfPoules: number): BalancedPouleStructure {\n        const calculateNrOfPlacesPerPoule = (nrOfPlaces: number, nrOfPoules: number): number => {\n            const nrOfPlaceLeft = (nrOfPlaces % nrOfPoules);\n            if (nrOfPlaceLeft === 0) {\n                return nrOfPlaces / nrOfPoules;\n            }\n            return ((nrOfPlaces - nrOfPlaceLeft) / nrOfPoules);\n        }\n        if (nrOfPoules < 1) {\n            throw new Error('er moet minimaal 1 poule aanwezig zijn');\n        }\n        const innerData: number[] = [];\n        while (nrOfPlaces > 0) {\n            const nrOfPlacesPerPoule = calculateNrOfPlacesPerPoule(nrOfPlaces, nrOfPoules--);\n            const nrOfPlacesToAdd = nrOfPlaces >= nrOfPlacesPerPoule ? nrOfPlacesPerPoule : nrOfPlaces;\n            innerData.push(nrOfPlacesToAdd);\n            nrOfPlaces -= nrOfPlacesPerPoule;\n        }\n        return new BalancedPouleStructure(...innerData)\n    }\n}","import { BalancedPouleStructure } from \"../poule/structure/balanced\";\nimport { BalancedPouleStructureCreator } from \"../poule/structure/balancedCreator\";\nimport { VoetbalRange } from \"../range\";\n\nexport class PlaceRanges {\n    public static readonly MinNrOfPlacesPerPoule = 2;\n    private placesPerPouleSmall: VoetbalRange;\n    private placesPerRoundSmall: VoetbalRange;\n    private nrOfPlacesSmallLargeBorder: number;\n    private placesPerPouleLarge: VoetbalRange | undefined;\n    private placesPerRoundLarge: VoetbalRange | undefined;\n    // private minNrOfPlacesPerPoule: number;\n    // private minNrOfPlacesPerRound: number;\n\n    constructor(\n        minNrOfPlacesPerPoule: number,\n        maxNrOfPlacesPerPouleSmall: number,\n        maxNrOfPlacesPerPouleLarge: number | undefined,\n        minNrOfPlacesPerRound: number,\n        maxNrOfPlacesPerRoundSmall: number,\n        maxNrOfPlacesPerRoundLarge: number | undefined\n    ) {\n        this.placesPerPouleSmall = this.initRange(minNrOfPlacesPerPoule, maxNrOfPlacesPerPouleSmall);\n        this.placesPerRoundSmall = this.initRange(minNrOfPlacesPerRound, maxNrOfPlacesPerRoundSmall);\n        this.nrOfPlacesSmallLargeBorder = maxNrOfPlacesPerRoundSmall;\n        if (maxNrOfPlacesPerPouleLarge !== undefined) {\n            this.placesPerPouleLarge = this.initRange(minNrOfPlacesPerPoule, maxNrOfPlacesPerPouleLarge);\n            if (maxNrOfPlacesPerRoundLarge !== undefined) {\n                this.placesPerRoundLarge = this.initRange(minNrOfPlacesPerRound, maxNrOfPlacesPerRoundLarge);\n            }\n        }\n    }\n\n    protected initRange(min: number, max: number): VoetbalRange {\n        return { min: min, max: max >= min ? max : min };\n    }\n\n    getPlacesPerPouleSmall(): VoetbalRange {\n        return this.placesPerPouleSmall;\n    }\n\n    validateStructure(structure: BalancedPouleStructure) {\n        return this.validate(structure.getNrOfPlaces(), structure.getNrOfPoules());\n    }\n\n    validate(nrOfPlaces: number, nrOfPoules: number) {\n\n        const placesPerRound = this.getValidPlacesPerRound(nrOfPlaces);\n        if (placesPerRound === undefined || nrOfPlaces < placesPerRound.min || nrOfPlaces > placesPerRound.max) {\n            throw new Error('het aantal deelnemers per ronde is kleiner dan het minimum of groter dan het maximum');\n        }\n\n        const creator = new BalancedPouleStructureCreator()\n        const pouleStructure = creator.create(nrOfPlaces, nrOfPoules);\n        const smallest = pouleStructure.getSmallestPoule();\n        const biggest = pouleStructure.getBiggestPoule();\n\n        const placesPerPoule = this.getValidPlacesPerPoule(nrOfPlaces);\n        if (placesPerPoule === undefined || smallest < placesPerPoule.min || biggest > placesPerPoule.max) {\n            throw new Error('het aantal deelnemers per poule is kleiner dan het minimum of groter dan het maximum');\n        }\n    }\n\n    protected getValidPlacesPerRound(nrOfPlaces: number): VoetbalRange | undefined {\n        if (nrOfPlaces <= this.nrOfPlacesSmallLargeBorder) {\n            return this.placesPerRoundSmall;\n        }\n        return this.placesPerRoundLarge;\n    }\n\n    protected getValidPlacesPerPoule(nrOfPlaces: number): VoetbalRange | undefined {\n        if (nrOfPlaces <= this.nrOfPlacesSmallLargeBorder) {\n            return this.placesPerPouleSmall;\n        }\n        return this.placesPerPouleLarge;\n    }\n}","import { PlaceRanges } from '../../structure/placeRanges';\nimport { AgainstGpp } from '../../sport/variant/against/gamesPerPlace';\nimport { AgainstH2h } from '../../sport/variant/against/h2h';\nimport { AllInOneGame } from '../../sport/variant/allInOneGame';\nimport { Single } from '../../sport/variant/single';\n\nexport class CompetitionSportGetter {\n    constructor(\n    ) {\n    }\n\n    getMinNrOfPlacesPerPoule(\n        sportVariants: (Single | AgainstH2h | AgainstGpp | AllInOneGame)[]): number {\n        let minNrOfPlacesPerPouleForSports = sportVariants.map((sportVariant: Single | AgainstH2h | AgainstGpp | AllInOneGame) => {\n            return this.getMinNrOfPlacesPerPouleForSport(sportVariant);\n        });\n        let minimum = Math.min.apply(Math, minNrOfPlacesPerPouleForSports);\n\n        if (minimum < PlaceRanges.MinNrOfPlacesPerPoule) {\n            minimum = PlaceRanges.MinNrOfPlacesPerPoule;\n        }\n        return minimum;\n        // return Math.max.apply(Math, minNrOfPlacesPerPouleForSports);\n    }\n\n    getMinNrOfPlacesPerPouleForSport(sportVariant: Single | AgainstH2h | AgainstGpp | AllInOneGame): number {\n        if (sportVariant instanceof AllInOneGame) {\n            return PlaceRanges.MinNrOfPlacesPerPoule;\n        }\n        return sportVariant.getNrOfGamePlaces();\n    }\n\n    /*getMinNrOfPlacesPerRound(\n        sportVariants: (SingleSportVariant | AgainstSportVariant | AllInOneGameSportVariant)[]): number {\n        const sportsMinNrOfPlaces = sportVariants.map((sportVariant: SingleSportVariant | AgainstSportVariant | AllInOneGameSportVariant) => {\n            if (sportVariant instanceof SingleSportVariant) {\n                return sportVariant.getNrOfGamePlaces();\n            }\n            return this.getMinNrOfPlacesPerPouleHelper(sportVariant);\n        });\n        return Math.max.apply(Math, sportsMinNrOfPlaces);\n    }*/\n\n    // getPlacesPerPouleRange(\n    //     maxNrOfPlacesPerPoule: number,\n    //     sportVariants: (SingleSportVariant | AgainstSportVariant | AllInOneGameSportVariant)[]): VoetbalRange {\n    //     const sportsMinNrOfPlaces = sportVariants.map((sportVariant: SingleSportVariant | AgainstSportVariant | AllInOneGameSportVariant) => {\n    //         if (sportVariant instanceof AgainstSportVariant) {\n    //             return sportVariant.getNrOfGamePlaces();\n    //         }\n    //         return 2;\n    //     });\n    //     const minNrOfPlacesPerPoule = Math.max.apply(Math, sportsMinNrOfPlaces);\n    //     if (maxNrOfPlacesPerPoule < minNrOfPlacesPerPoule) {\n    //         maxNrOfPlacesPerPoule = minNrOfPlacesPerPoule;\n    //     }\n    //     return { min: minNrOfPlacesPerPoule, max: maxNrOfPlacesPerPoule };\n    // }\n\n    // getPlacesPerRoundRange(\n    //     minNrOfPlacesPerPoule: number,\n    //     sportVariants: (SingleSportVariant | AgainstSportVariant | AllInOneGameSportVariant)[]): VoetbalRange {\n    //     const sportsMinNrOfPlaces = sportVariants.map((sportVariant: SingleSportVariant | AgainstSportVariant | AllInOneGameSportVariant) => {\n    //         if (sportVariant instanceof SingleSportVariant) {\n    //             return sportVariant.getNrOfGamePlaces();\n    //         }\n    //         return minNrOfPlacesPerPoule;\n    //     });\n    //     const minNrOfPlacesPerRound = Math.max.apply(Math, sportsMinNrOfPlaces);\n    //     if (maxNrOfPlacesPerRound < minNrOfPlacesPerRound) {\n    //         maxNrOfPlacesPerRound = minNrOfPlacesPerRound;\n    //     }\n    //     return { min: minNrOfPlacesPerRound, max: maxNrOfPlacesPerRound };\n    // }\n\n    // isDefault(sportConfig: SportConfig): boolean {\n    //     const sport = sportConfig.getSport();\n    //     return (sportConfig.getWinPoints() !== this.getDefaultWinPoints(sport)\n    //         || sportConfig.getDrawPoints() !== this.getDefaultDrawPoints(sport)\n    //         || sportConfig.getWinPointsExt() !== this.getDefaultWinPointsExt(sport)\n    //         || sportConfig.getDrawPointsExt() !== this.getDefaultDrawPointsExt(sport)\n    //         || sportConfig.getLosePointsExt() !== this.getDefaultLosePointsExt(sport)\n    //         || sportConfig.getPointsCalculation() !== SportConfig.Points_Calc_GamePoints\n    //         || sportConfig.getNrOfGamePlaces() !== SportConfig.Default_NrOfGamePlaces\n    //     );\n    // }\n\n    // areEqual(sportConfigA: SportConfig, sportConfigB: SportConfig): boolean {\n    //     return (sportConfigA.getSport() !== sportConfigB.getSport()\n    //         || sportConfigA.getWinPoints() !== sportConfigB.getWinPoints()\n    //         || sportConfigA.getDrawPoints() !== sportConfigB.getDrawPoints()\n    //         || sportConfigA.getWinPointsExt() !== sportConfigB.getWinPointsExt()\n    //         || sportConfigA.getDrawPointsExt() !== sportConfigB.getDrawPointsExt()\n    //         || sportConfigA.getLosePointsExt() !== sportConfigB.getLosePointsExt()\n    //         || sportConfigA.getPointsCalculation() !== sportConfigB.getPointsCalculation()\n    //         || sportConfigA.getNrOfGamePlaces() !== sportConfigB.getNrOfGamePlaces()\n    //     );\n    // }\n}\n","import { RoundNumber } from '../round/number';\nimport { HorizontalPoule } from '../poule/horizontal';\nimport { Competition } from '../competition';\nimport { Place } from '../place';\nimport { PlaceLocation } from '../place/location';\nimport { Poule } from '../poule';\nimport { CompetitionSport } from '../competition/sport';\nimport { ScoreConfig } from '../score/config';\nimport { AgainstQualifyConfig } from './againstConfig';\nimport { Identifiable } from '../identifiable';\nimport { AgainstGame } from '../game/against';\nimport { TogetherGame } from '../game/together';\nimport { QualifyTarget } from './target';\nimport { QualifyPathNode } from './pathNode';\nimport { BalancedPouleStructure } from '../poule/structure/balanced';\nimport { GameState } from '../game/state';\nimport { Category } from '../category';\nimport { StructureCell } from '../structure/cell';\nimport { StartLocation } from '../competitor/startLocation';\nimport { QualifyDistribution } from './distribution';\nimport { VerticalMultipleQualifyRule } from './rule/vertical/multiple';\nimport { VerticalSingleQualifyRule } from './rule/vertical/single';\nimport { HorizontalSingleQualifyRule } from './rule/horizontal/single';\nimport { HorizontalMultipleQualifyRule } from './rule/horizontal/multiple';\n\nimport { CompetitionSportGetter } from '../competition/sport/getter';\nimport { NrOfDropOuts } from '../ranking/calculator/end';\nimport { map } from 'rxjs';\n\nexport class QualifyGroup extends Identifiable {\n    static readonly QUALIFYORDER_CROSS = 1;\n    static readonly QUALIFYORDER_RANK = 2;\n    static readonly QUALIFYORDER_CUSTOM1 = 4;\n    static readonly QUALIFYORDER_CUSTOM2 = 5;\n\n    protected number: number\n    protected childRound: Round;\n    protected distribution: QualifyDistribution = QualifyDistribution.HorizontalSnake;\n    protected firstSingleRule: HorizontalSingleQualifyRule | VerticalSingleQualifyRule | undefined;\n    protected multipleRule: HorizontalMultipleQualifyRule | VerticalMultipleQualifyRule | undefined;\n\n    constructor(protected parentRound: Round, protected target: QualifyTarget, nextStructureCell: StructureCell, number?: number) {\n        super();\n        this.number = number ? number : this.parentRound.getQualifyGroups(this.getTarget()).length + 1;\n        this.parentRound.getQualifyGroups(this.getTarget()).splice(this.number - 1, 0, this);\n        this.childRound = new Round(nextStructureCell, this);\n    }\n\n    getParentRound(): Round {\n        return this.parentRound;\n    }\n\n    getTarget(): QualifyTarget {\n        return this.target;\n    }\n\n    getNumber(): number {\n        return this.number;\n    }\n\n    setNumber(number: number): void {\n        this.number = number;\n    }\n\n    getChildRound(): Round {\n        return this.childRound;\n    }\n\n    getDistribution(): QualifyDistribution {\n        return this.distribution;\n    }\n\n    setDistribution(distribution: QualifyDistribution): void {\n        this.distribution = distribution;\n    }\n\n    getFirstSingleRule(): HorizontalSingleQualifyRule | VerticalSingleQualifyRule | undefined {\n        return this.firstSingleRule;\n    }\n\n    setFirstSingleRule(singleRule: HorizontalSingleQualifyRule | VerticalSingleQualifyRule | undefined): void {\n        this.firstSingleRule = singleRule;\n    }\n\n    getMultipleRule(): HorizontalMultipleQualifyRule | VerticalMultipleQualifyRule | undefined {\n        return this.multipleRule;\n    }\n\n    setMultipleRule(multipleRule: HorizontalMultipleQualifyRule | VerticalMultipleQualifyRule | undefined): void {\n        this.multipleRule = multipleRule;\n    }\n\n    getNrOfSingleRules(): number {\n        let nrOfSingleRules = 0;\n        \n        let singleRule = this.firstSingleRule;\n        while  (singleRule !== undefined) {\n            nrOfSingleRules++;\n            singleRule = singleRule.getNext();\n        }\n        return nrOfSingleRules;\n    }\n\n    getRulesNrOfToPlaces(): number {\n        let nrOfToPlaces = 0;\n        \n        let singleRule = this.getFirstSingleRule();\n        while (singleRule !== undefined) {\n            nrOfToPlaces += singleRule.getNrOfMappings(); //() + singleRule.getNrOfToPlacesTargetSide(QualifyTarget.Losers);\n            singleRule = singleRule.getNext();\n        }\n        const multipleRule = this.getMultipleRule();\n        if (multipleRule !== undefined) {\n            nrOfToPlaces += multipleRule.getNrOfToPlaces();\n        }\n        return nrOfToPlaces;\n    }\n\n    getNext(): QualifyGroup | undefined {\n        return this.getParentRound().getQualifyGroup(this.getTarget(), this.getNumber() + 1);\n    }\n\n    getRuleByToPlace(toPlace: Place): HorizontalSingleQualifyRule | HorizontalMultipleQualifyRule | VerticalSingleQualifyRule | VerticalMultipleQualifyRule {\n        \n        let singleRule = this.firstSingleRule;\n        while (singleRule !== undefined) {\n            if (singleRule.getMappingByToPlace(toPlace) !== undefined) {\n                return singleRule;\n            }\n            singleRule = singleRule.getNext();\n        }\n        const multipleRule = this.getMultipleRule();\n        if (multipleRule === undefined || !multipleRule.hasToPlace(toPlace)) {\n            throw Error('de horizontale multiple kwalificatieregel kan niet gevonden worden');\n        }\n        return multipleRule;\n    }\n\n    getFromPlace(toPlace: Place): Place | undefined {\n        let singleRule = this.getRuleByToPlace(toPlace);\n        if (singleRule instanceof HorizontalSingleQualifyRule) {\n            const mapping = singleRule.getMappingByToPlace(toPlace);\n            return mapping?.getFromPlace();\n        }\n        return undefined;\n    }\n\n    isBorderGroup(): boolean {\n        return this.getNext() === undefined;\n    }\n\n    detach() {\n        this.detachRules();\n        const qualifyGroups = this.getParentRound().getQualifyGroups(this.getTarget());\n        const idx = qualifyGroups.indexOf(this);\n        qualifyGroups.splice(idx, 1);\n        this.getChildRound().detach();\n    }\n\n    detachRules() {\n        if (this.multipleRule !== undefined) {\n            this.multipleRule.detach();\n            this.multipleRule = undefined;\n        }\n        if (this.firstSingleRule !== undefined) {\n            this.firstSingleRule.detach();\n            this.firstSingleRule = undefined;\n        }\n    }\n}\n\n\nexport class Round extends Identifiable {\n    static readonly ORDER_NUMBER_POULE = 1;\n    static readonly ORDER_POULE_NUMBER = 2;\n\n    protected name: string | undefined;\n    protected poules: Poule[] = [];\n    protected losersQualifyGroups: QualifyGroup[] = [];\n    protected winnersQualifyGroups: QualifyGroup[] = [];\n    protected losersHorizontalPoules: HorizontalPoule[] = [];\n    protected winnersHorizontalPoules: HorizontalPoule[] = [];\n    protected qualifyPathNode: QualifyPathNode;\n    protected scoreConfigs: ScoreConfig[] = [];\n    protected againstQualifyConfigs: AgainstQualifyConfig[] = [];\n\n    constructor(protected structureCell: StructureCell, protected parentQualifyGroup: QualifyGroup | undefined) {\n        super();\n        this.structureCell.getRounds().push(this);\n        this.qualifyPathNode = this.constructQualifyPathNode();\n    }\n\n    getCompetition(): Competition {\n        return this.getNumber().getCompetition();\n    }\n\n    getCategory(): Category {\n        return this.getStructureCell().getCategory();\n    }\n\n    getParent(): Round | undefined {\n        return this.getParentQualifyGroup()?.getParentRound();\n    }\n\n    getParentQualifyGroup(): QualifyGroup | undefined {\n        return this.parentQualifyGroup;\n    }\n\n    getStructureCell(): StructureCell {\n        return this.structureCell;\n    }\n\n    getNumber(): RoundNumber {\n        return this.structureCell.getRoundNumber();\n    }\n\n    getNumberAsValue(): number {\n        return this.getNumber().getNumber();\n    }\n\n    getNrOfDropoutPlaces(): NrOfDropOuts {\n        const nrOfDropOuts = this.getNrOfPlaces() - this.getNrOfPlacesChildren();\n        return { amount: nrOfDropOuts };\n    }\n\n    getQualifyGroups(qualifyTarget?: QualifyTarget): QualifyGroup[] {\n        if (qualifyTarget === undefined) {\n            return this.winnersQualifyGroups.concat(this.losersQualifyGroups);\n        }\n        return (qualifyTarget === QualifyTarget.Winners) ? this.winnersQualifyGroups : this.losersQualifyGroups;\n    }\n\n    getQualifyGroupsLosersReversed() {\n        return this.winnersQualifyGroups.concat(this.losersQualifyGroups.slice().reverse());\n    }\n\n    getQualifyGroup(qualifyTarget: QualifyTarget, qualifyGroupNumber: number): QualifyGroup | undefined {\n        return this.getQualifyGroups(qualifyTarget).find(qualifyGroup => qualifyGroup.getNumber() === qualifyGroupNumber);\n    }\n\n    getBorderQualifyGroup(qualifyTarget: QualifyTarget): QualifyGroup {\n        const qualifyGroups = this.getQualifyGroups(qualifyTarget);\n        return qualifyGroups[qualifyGroups.length - 1];\n    }\n\n    getChildren(): Round[] {\n        return this.getQualifyGroups().map(qualifyGroup => qualifyGroup.getChildRound());\n    }\n\n    getChild(qualifyTarget: QualifyTarget, qualifyGroupNumber: number): Round | undefined {\n        return this.getQualifyGroup(qualifyTarget, qualifyGroupNumber)?.getChildRound();\n    }\n\n    getRoot(): Round {\n        const parent = this.getParent();\n        if (parent === undefined) {\n            return this;\n        }\n        return parent.getRoot();\n    }\n\n    isRoot(): boolean {\n        return this.getParent() === undefined;\n    }\n\n    getName(): string | undefined {\n        return this.name;\n    }\n\n    setName(name: string): void {\n        this.name = name;\n    }\n\n    getPoules(): Poule[] {\n        return this.poules;\n    }\n\n    getPoule(number: number): Poule {\n        const poule = this.getPoules().find(poule => poule.getNumber() === number);\n        if (poule === undefined) {\n            throw Error('de poule kan niet gevonden worden.');\n        }\n        return poule;\n    }\n\n    getHorizontalPoules(qualifyTarget: QualifyTarget): HorizontalPoule[] {\n        if (qualifyTarget === QualifyTarget.Winners) {\n            return this.winnersHorizontalPoules;\n        }\n        return this.losersHorizontalPoules;\n    }\n\n    getHorizontalPoule(qualifyTarget: QualifyTarget, number: number): HorizontalPoule {\n        const horPoule = this.getHorizontalPoules(qualifyTarget).find(horPoule => horPoule.getNumber() === number);\n        if (horPoule === undefined) {\n            throw new Error('horizontalPoule can not be undefined');\n        }\n        return horPoule;\n    }\n\n    getFirstPlace(qualifyTarget: QualifyTarget): Place {\n        const firstHorizontalPoule = this.getHorizontalPoule(qualifyTarget, 1);\n        if (firstHorizontalPoule === undefined) {\n            throw Error('de ronde heeft geen uhorizontale poules');\n        }\n        return firstHorizontalPoule.getFirstPlace();\n    }\n\n    getPlaces(order?: number): Place[] {\n        let places: Place[] = [];\n        if (order === Round.ORDER_NUMBER_POULE) {\n            this.getHorizontalPoules(QualifyTarget.Winners).forEach((poule) => {\n                places = places.concat(poule.getPlaces());\n            });\n        } else {\n            this.getPoules().forEach((poule) => {\n                places = places.concat(poule.getPlaces());\n            });\n        }\n        return places;\n    }\n\n    getPlace(placeLocation: PlaceLocation): Place {\n        const place = this.getPoule(placeLocation.getPouleNr()).getPlace(placeLocation.getPlaceNr());\n        if (place === undefined) {\n            throw Error('de plek kan niet gevonden worden');\n        }\n        return place;\n    }\n\n    getGames(): (AgainstGame | TogetherGame)[] {\n        const games: (AgainstGame | TogetherGame)[] = [];\n        this.getPoules().forEach(poule => {\n            poule.getGames().forEach(game => games.push(game));\n        });\n        return games;\n    }\n\n    getNrOfGames(): number {\n        let nrOfGames = 0;\n        this.getPoules().forEach(poule => {\n            nrOfGames += poule.getNrOfGames();\n        });\n        return nrOfGames;\n    }\n\n    getGamesState(): GameState {\n        if (this.getPoules().every(poule => poule.getGamesState() === GameState.Finished)) {\n            return GameState.Finished;\n        } else if (this.getPoules().some(poule => poule.getGamesState() !== GameState.Created)) {\n            return GameState.InProgress;\n        }\n        return GameState.Created;\n    }\n\n    hasBegun(): boolean {\n        return this.getGamesState() > GameState.Created;\n    }\n\n    hasFinished(): boolean {\n        return this.getGamesState() > GameState.Created;\n    }\n\n    needsRanking(): boolean {\n        return this.getPoules().some(function (pouleIt) {\n            return pouleIt.needsRanking();\n        });\n    }\n\n    getNrOfPlaces(): number {\n        let nrOfPlaces = 0;\n        this.getPoules().forEach(poule => nrOfPlaces += poule.getPlaces().length);\n        return nrOfPlaces;\n    }\n\n    getNrOfPlacesChildren(qualifyTarget?: QualifyTarget): number {\n        let nrOfPlacesChildRounds = 0;\n        this.getQualifyGroups(qualifyTarget).forEach(qualifyGroup => {\n            nrOfPlacesChildRounds += qualifyGroup.getChildRound().getNrOfPlaces();\n        });\n        return nrOfPlacesChildRounds;\n    }\n\n    getScoreConfigs(): ScoreConfig[] {\n        return this.scoreConfigs;\n    }\n\n    getScoreConfig(competitionSport: CompetitionSport): ScoreConfig | undefined {\n        return this.scoreConfigs.find(scoreConfigIt => scoreConfigIt.getCompetitionSport() === competitionSport);\n    }\n\n    getValidScoreConfigs(): ScoreConfig[] {\n        return this.getNumber().getCompetitionSports().map(competitionSport => this.getValidScoreConfig(competitionSport));\n    }\n\n    getValidScoreConfig(competitionSport: CompetitionSport): ScoreConfig {\n        const scoreConfig = this.getScoreConfig(competitionSport);\n        if (scoreConfig !== undefined) {\n            return scoreConfig;\n        }\n        const parent = this.getParent();\n        if (parent === undefined) {\n            throw Error('de score-regels kunnen niet gevonden worden');\n        }\n        return parent.getValidScoreConfig(competitionSport);\n    }\n\n    getAgainstQualifyConfigs(): AgainstQualifyConfig[] {\n        return this.againstQualifyConfigs;\n    }\n\n    getAgainstQualifyConfig(competitionSport: CompetitionSport): AgainstQualifyConfig | undefined {\n        return this.againstQualifyConfigs.find(againstQualifyConfigIt => againstQualifyConfigIt.getCompetitionSport() === competitionSport);\n    }\n\n    setAgainstQualifyConfig(qualifyagainstConfig: AgainstQualifyConfig) {\n        this.againstQualifyConfigs.push(qualifyagainstConfig);\n    }\n\n    getValidAgainstQualifyConfigs(): AgainstQualifyConfig[] {\n        return this.getNumber().getCompetitionSports().map(competitionSport => this.getValidAgainstQualifyConfig(competitionSport));\n    }\n\n    getValidAgainstQualifyConfig(competitionSport: CompetitionSport): AgainstQualifyConfig {\n        const againstQualifyConfig = this.getAgainstQualifyConfig(competitionSport);\n        if (againstQualifyConfig !== undefined) {\n            return againstQualifyConfig;\n        }\n        const parent = this.getParent();\n        if (parent === undefined) {\n            throw Error('de punten-regels kunnen niet gevonden worden');\n        }\n        return parent.getValidAgainstQualifyConfig(competitionSport);\n    }\n\n    hasAncestor(ancestor: Round): boolean {\n        const parent = this.getParent();\n        if (!parent) {\n            return false;\n        }\n        if (parent === ancestor) {\n            return true;\n        }\n        return parent.hasAncestor(ancestor);\n    }\n\n    addPlace() {\n        const pouleStructure = this.createPouleStructure();\n        const pouleNr = pouleStructure.getFirstLesserNrOfPlacesPouleNr();\n        new Place(this.getPoule(pouleNr));\n    }\n\n    removePlace(): number {\n        const pouleStructure = this.createPouleStructure();\n        const pouleNr = pouleStructure.getLastGreaterNrOfPlacesPouleNr();\n        const poule = this.getPoule(pouleNr);\n\n        const poulePlaces = poule.getPlaces();\n        const nrOfPoulePlaces = poulePlaces.length; \n        \n        const removedPoulePlaces = poulePlaces.splice(nrOfPoulePlaces - 1, 1);\n\n        const sportVariants = poule.getCompetition().getSportVariants();\n        const minNrOfPlacesPerPoule = (new CompetitionSportGetter()).getMinNrOfPlacesPerPoule(sportVariants);\n        \n        if (poulePlaces.length < minNrOfPlacesPerPoule) {\n            this.removePoule();\n            return nrOfPoulePlaces;\n        }\n        return removedPoulePlaces.length;\n    }\n\n    getFirstPoule(): Poule {\n        return this.getPoule(1);\n    }\n\n    getLastPoule(): Poule {\n        return this.getPoule(this.getPoules().length);\n    }\n\n\n    addPoule(): Poule {\n        const lastPoule = this.getLastPoule();\n        const poule = new Poule(this);\n        lastPoule.getPlaces().forEach((place: Place) => new Place(poule));\n        return this.getLastPoule();\n    }\n\n    removePoule(): Poule {\n        const lastPoule = this.getLastPoule();\n        this.poules.splice(this.poules.length - 1, 1);\n        if (this.poules.length === 0) {\n            this.detach();\n        }\n        return lastPoule;\n    }\n\n    // getChild(getStructurePathNode(structurePath: string): StructurePathNode {\n    //     this.getRound()\n\n    //     const getStructurePathNode = (pathNode: StructurePathNode): StructurePathNode => {\n    //         const winnersIdx = structurePath.indexOf(QualifyTarget.Winners);\n    //         const losersIdx = structurePath.indexOf(QualifyTarget.Losers);\n    //         const idx = winnersIdx > losersIdx ? winnersIdx : losersIdx;\n    //         if (idx < 0) {\n    //             return pathNode;\n    //         }\n\n    //         return pathNode.getNext();\n    //     });\n    //     return getStructurePathNode(this.rootRound)\n    // }\n\n\n    protected constructQualifyPathNode(): QualifyPathNode {\n        if (this.parentQualifyGroup === undefined) {\n            return new QualifyPathNode(undefined, 1);\n        }\n        return new QualifyPathNode(\n            this.parentQualifyGroup.getTarget(),\n            this.parentQualifyGroup.getNumber(),\n            this.parentQualifyGroup.getParentRound().getPathNode());\n    }\n\n    getPathNode(): QualifyPathNode {\n        return this.qualifyPathNode;\n    }\n\n    createPouleStructure(): BalancedPouleStructure {\n        const nrOfPlaces = this.getPoules().map((poule: Poule): number => poule.getPlaces().length);\n        return new BalancedPouleStructure(...nrOfPlaces);\n    }\n\n    detach() {\n        const rounds = this.getStructureCell().getRounds();\n        const idx = rounds.indexOf(this);\n        if (idx > -1) {\n            rounds.splice(idx, 1);\n        }\n        if (rounds.length === 0) {\n            this.getStructureCell().detach();\n        }\n        this.parentQualifyGroup = undefined;\n    }\n\n    public hasQualified(startLocation: StartLocation): boolean {\n        return this.getPoules().some((poule: Poule): boolean => {\n            return poule.getPlaceByStartLocation(startLocation) !== undefined;\n        });\n    }\n}\n\n","import { Place } from \"../place\";\nimport { Poule } from \"../poule\";\nimport { PossibleFromMap } from \"./possibleFromMap\";\n\n\nexport class FromPoulePicker {\n    protected possibleParentFromMap: PossibleFromMap | undefined = undefined;\n\n    public constructor(protected possibleFromMap: PossibleFromMap) {\n    }\n\n    public getBestFromPoule(\n        childPoule: Poule, avaiableFromPoules: Poule[], otherChildRoundPoules: Poule[]\n    ): Poule {\n        if (this.possibleFromMap.isEmpty()) {\n            const bestFromPoule = avaiableFromPoules[0];\n            if (bestFromPoule !== undefined) {\n                return bestFromPoule;\n            }\n        }\n        const bestFromPoules = this.getFewestOverlapses(childPoule, avaiableFromPoules);\n\n        if (bestFromPoules.length === 1) {\n            return <Poule>bestFromPoules.pop();\n        }\n        const fromPlacesWithMostOtherPouleOrigins = this.getMostOverlapses(otherChildRoundPoules, bestFromPoules);\n        const fromPlacesWithMostOtherPouleOrigin = fromPlacesWithMostOtherPouleOrigins[0];\n        if (fromPlacesWithMostOtherPouleOrigin === undefined) {\n            throw new Error('could not find best pick');\n        }\n        return fromPlacesWithMostOtherPouleOrigin;\n    }\n\n    protected getFewestOverlapses(p_childPoule: Poule, availableFromPoules: Poule[]): Poule[] {\n        const bestFromPoules = this.getFewestOverlapsesHelper(p_childPoule, availableFromPoules, this.possibleFromMap);\n        if (bestFromPoules.length < 2) {\n            return bestFromPoules;\n        }\n\n        const possibleParentFromMap = this.getParentPossibleFromMap();\n        if (possibleParentFromMap === undefined) {\n            return bestFromPoules;\n        }\n        const alreadyUsedGrandParentPoules = this.getGrantParentPossiblePoules(p_childPoule);\n        let fewestOverlapses: number | undefined = undefined;\n\n        let veryBestFromPoules: Poule[] = [];\n        bestFromPoules.forEach((bestFromPoule: Poule) => {\n            let nrOfOverlapses = 0;\n            alreadyUsedGrandParentPoules.forEach((alreadyUsedGrandParentPoule: Poule) => {\n                nrOfOverlapses += this.getNrOfPossibleOverlapses(alreadyUsedGrandParentPoule, bestFromPoule, possibleParentFromMap);\n            });\n            //            bestFromParentPoules = this->getFewestOverlapsesHelper(\n            //                bestFromPoule,\n            //                alreadyUsedGrandParentPoules,\n            //                possibleParentFromMap\n            //            );\n            // x = array_intersect => bestFromParentPoules, possibleParentFromPoules,\n            //            nrOfOverlapses = count(bestFromParentPoules);\n            if (fewestOverlapses === undefined || nrOfOverlapses < fewestOverlapses) {\n                veryBestFromPoules = [bestFromPoule];\n                fewestOverlapses = nrOfOverlapses;\n            } else if (fewestOverlapses === nrOfOverlapses) {\n                veryBestFromPoules.push(bestFromPoule);\n            }\n        });\n        return veryBestFromPoules;\n    }\n\n    protected getFewestOverlapsesHelper(childPoule: Poule, availableFromPoules: Poule[], possibleFromMap: PossibleFromMap): Poule[] {\n        // toPoule = toPlace->getPoule();\n        let bestFromPoules: Poule[] = [];\n        let fewestOverlapses: number | undefined = undefined;\n        // possibleFromPoules = this->possibleFromMap->getFromPoules(childPoule);\n        availableFromPoules.forEach((availableFromPoule: Poule) => {\n            let nrOfOverlapses = this.getNrOfPossibleOverlapses(availableFromPoule, childPoule, possibleFromMap);\n            if (fewestOverlapses === undefined || nrOfOverlapses < fewestOverlapses) {\n                bestFromPoules = [availableFromPoule];\n                fewestOverlapses = nrOfOverlapses;\n            } else if (fewestOverlapses === nrOfOverlapses) {\n                bestFromPoules.push(availableFromPoule);\n            }\n        });\n        return bestFromPoules;\n    }\n\n    protected getGrantParentPossiblePoules(childPoule: Poule): Poule[] {\n        const parentPossibleFromMap = this.getParentPossibleFromMap();\n        if (parentPossibleFromMap === undefined) {\n            return [];\n        }\n        let possiblePoules: Poule[] = [];\n        this.possibleFromMap.getFromPoules(childPoule).forEach((fromPoule: Poule) => {\n            possiblePoules = possiblePoules.concat(parentPossibleFromMap.getFromPoules(fromPoule));\n        });\n        return possiblePoules;\n    }\n\n\n    protected getOtherChildRoundPoules(otherChildRoundPlaces: Place[]): Poule[] {\n        const firstPlace = otherChildRoundPlaces.pop();\n        const poules = firstPlace !== undefined ? [firstPlace.getPoule()] : [];\n        otherChildRoundPlaces.forEach((place: Place) => {\n            const idx = poules.indexOf(place.getPoule());\n            if (idx >= 0) {\n                poules.push(place.getPoule());\n            }\n        });\n        return poules;\n    }\n\n    protected getMostOverlapses(otherChildPoules: Poule[], availableFromPoules: Poule[]): Poule[] {\n        // toPoule = toPlace->getPoule();\n        let bestFromPoules: Poule[] = [];\n        let mostOverlapses: number | undefined = undefined;\n        // possibleFromPoules = this->possibleFromMap->getFromPoules(childPoule);\n        availableFromPoules.forEach((availableFromPoule: Poule) => {\n            otherChildPoules.forEach((otherChildPoule: Poule) => {\n                const nrOfOverlapses = this.getNrOfPossibleOverlapses(availableFromPoule, otherChildPoule, this.possibleFromMap);\n                if (mostOverlapses === undefined || nrOfOverlapses > mostOverlapses) {\n                    bestFromPoules = [availableFromPoule];\n                    mostOverlapses = nrOfOverlapses;\n                } else if (mostOverlapses === nrOfOverlapses) {\n                    bestFromPoules.push(availableFromPoule);\n                }\n            });\n        });\n        return bestFromPoules;\n    }\n\n    protected getNrOfPossibleOverlapses(fromPoule: Poule, childPoule: Poule, possibleFromMap: PossibleFromMap): number {\n        const possibleFromPoules = possibleFromMap.getFromPoules(childPoule);\n        const overlapses = possibleFromPoules.filter((possibleFromPoule: Poule) => {\n            return possibleFromPoule === fromPoule;\n        });\n        return overlapses.length;\n    }\n\n    protected getParentPossibleFromMap(): PossibleFromMap | undefined {\n        if (this.possibleParentFromMap === undefined) {\n            this.possibleParentFromMap = this.possibleFromMap.createParent();\n        }\n        return this.possibleParentFromMap;\n    }\n}","import { Place } from \"../place\";\n\nexport class QualifyMapping {\n    constructor(private toPlace: Place) {\n\n    }\n\n    getToPlace(): Place {\n        return this.toPlace;\n    }\n}","import { Place } from \"../../place\";\nimport { Poule } from \"../../poule\";\nimport { QualifyMapping } from \"../mapping\";\n\nexport class QualifyMappingByPlace extends QualifyMapping {\n    constructor(private fromPlace: Place, toPlace: Place) {\n        super(toPlace);\n    }\n\n    getFromPlace(): Place {\n        return this.fromPlace;\n    }\n\n    getFromPoule(): Poule {\n        return this.fromPlace.getPoule();\n    }\n}\n","import { Poule } from \"../poule\";\nimport { QualifyDistribution } from \"./distribution\";\nimport { QualifyGroup, Round } from \"./group\";\nimport { QualifyMappingByPlace } from \"./mapping/byPlace\";\nimport { QualifyMappingByRank } from \"./mapping/byRank\";\n\n\nexport class PossibleFromMap {\n\n    protected map: FromPouleMap = {};\n    protected empty = true;\n\n    public constructor(protected leafRound: Round, initMap: boolean = false) {\n        leafRound.getPoules().forEach((childPoule: Poule) => this.map[childPoule.getNumber()] = []);\n        if (initMap) {\n            this.initMap(leafRound);\n        }\n    }\n\n    protected initMap(round: Round): void {\n        const qualifyGroup = round.getParentQualifyGroup();\n        if (qualifyGroup === undefined) {\n            return;\n        }\n        this.addGroup(qualifyGroup);\n    }\n\n    protected addGroup(group: QualifyGroup): void {\n        \n        if (group.getDistribution() === QualifyDistribution.Vertical ) {\n            if (group.getFirstSingleRule() !== undefined || group.getMultipleRule() !== null) {\n                this.addGroupToMap(group);\n            }\n        } else {\n\n            let singleRule = group.getFirstSingleRule();\n            while (singleRule !== undefined) {\n                singleRule.getMappings().forEach((mapping: QualifyMappingByPlace | QualifyMappingByRank) => {\n                    if (mapping instanceof QualifyMappingByPlace) {\n                        this.addMappingToMap(mapping);\n                    } \n                });\n                singleRule = singleRule.getNext();\n            }\n            const multipRule = group.getMultipleRule();\n            if (multipRule !== undefined) {\n                this.addGroupToMap(group);\n            }\n        }\n    }\n\n    public createParent(): PossibleFromMap | undefined {\n        const parentQualifyGroup = this.leafRound.getParentQualifyGroup();\n        if (parentQualifyGroup === undefined) {\n            return undefined;\n        }\n        const grandParentQualifyGroup = parentQualifyGroup.getParentRound().getParentQualifyGroup();\n        if (grandParentQualifyGroup === undefined) {\n            return undefined;\n        }\n        return new PossibleFromMap(parentQualifyGroup.getParentRound(), true);\n    }\n\n    public addMappingToMap(placeMapping: QualifyMappingByPlace): void {\n        this.empty = false;\n        const childPouleNumber = placeMapping.getToPlace().getPoule().getNumber();\n        this.map[childPouleNumber].push(placeMapping.getFromPoule());\n    }\n\n    protected addGroupToMap(group: QualifyGroup): void {\n        this.empty = false;\n        const parentPoules = group.getParentRound().getPoules();\n        group.getChildRound().getPoules().forEach((childPoule: Poule) => {\n            this.map[childPoule.getNumber()] = parentPoules;\n        });\n    }\n\n    public getFromPoules(childPoule: Poule): Poule[] {\n        return this.map[childPoule.getNumber()];\n    }\n\n    public isEmpty(): boolean {\n        return this.empty;\n    }\n}\n\ninterface FromPouleMap {\n    [key: number]: Poule[];\n}","import { HorizontalPoule } from '../../../poule/horizontal';\nimport { Place } from '../../../place';\nimport { QualifyGroup } from '../../group';\nimport { HorizontalQualifyRule } from '../horizontal';\nimport { QualifyTarget } from '../../target';\n\nexport class HorizontalMultipleQualifyRule extends HorizontalQualifyRule {\n\n    constructor(fromHorizontalPoule: HorizontalPoule, group: QualifyGroup, private toPlaces: Place[]) {\n        super(fromHorizontalPoule/*, group*/);\n        this.fromHorizontalPoule.setQualifyRuleNew(this);\n        group.setMultipleRule(this);\n    }\n\n\n    /*addToPlace(toPlace: Place) {\n        this.toPlaces.push(toPlace);\n        toPlace.setFromQualifyRule(this);\n    }\n\n    toPlacesComplete(): boolean {\n        return this.nrOfToPlaces === this.toPlaces.length;\n    }*/\n\n    hasToPlace(place: Place): boolean {\n        return this.toPlaces.indexOf(place) >= 0;\n    }\n\n    public getAbsoluteRankByToPlace(toPlace: Place): number {\n        const idx = this.toPlaces.indexOf(toPlace);\n        if (this.getQualifyTarget() === QualifyTarget.Losers ) {\n            const nrOfHorPlaces = this.getFromHorizontalPoule().getPlaces().length;\n            return idx < 0 ? 0 : nrOfHorPlaces - idx;\n        }\n        return idx < 0 ? 0 : idx + 1;\n    }\n\n    getToPlaces(): Place[] {\n        return this.toPlaces;\n    }\n\n    getNrOfToPlaces(): number {\n        return this.toPlaces.length;\n    }\n\n    // public getNrOfDropouts(): number {\n    //     return this.fromHorizontalPoule.getPlaces().length - this.getNrOfToPlaces();\n    // }\n\n    detach() {\n        this.getFromHorizontalPoule().setQualifyRuleNew(undefined);\n    }\n\n    getGroup(): QualifyGroup {\n        const target = this.getQualifyTarget();\n        const qualifGroup = this.getFromRound().getQualifyGroups(target).find((qualifyGroup: QualifyGroup) => {\n            return this === qualifyGroup.getMultipleRule();\n        });\n        if (qualifGroup === undefined) {\n            throw Error('voor de multiple-kwalificatieregel kan geen groep worden gevonden');\n        }\n        return qualifGroup;\n    }\n}\n\n","import { Place } from \"../../../place\";\nimport { Poule } from \"../../../poule\";\nimport { HorizontalPoule } from \"../../../poule/horizontal\";\nimport { FromPoulePicker } from \"../../fromPoulePicker\";\nimport { QualifyGroup, Round } from \"../../group\";\nimport { QualifyMappingByPlace } from \"../../mapping/byPlace\";\nimport { PossibleFromMap } from \"../../possibleFromMap\";\nimport { HorizontalMultipleQualifyRule } from \"../horizontal/multiple\";\nimport { HorizontalSingleQualifyRule } from \"../horizontal/single\";\n\n/**\n * indeling obv \n * 1 minst vaak tegen iemand die je al eerder bent tegen gekomen\n * 2 beste tegen slechtste\n */\nexport class HorizontalQualifyRuleCreator {\n\n    private possibleFromMap: PossibleFromMap;\n\n    constructor(leafRound: Round) {\n        this.possibleFromMap = new PossibleFromMap(leafRound);\n    }\n\n    public createRules(\n        fromRoundHorPoules: HorizontalPoule[],\n        qualifyGroup: QualifyGroup) {\n\n            \n        // const childRoundPlaces = this.getChildRoundPlacesLikeSnake(qualifyGroup);\n        // let fromHorPoule: HorizontalPoule | undefined = fromRoundHorPoules.shift();\n        // let previousRule: HorizontalSingleQualifyRule | undefined;\n        // while (fromHorPoule !== undefined && childRoundPlaces.length >= fromHorPoule.getPlaces().length) {\n        //     const toPlaces = childRoundPlaces.splice(0, fromHorPoule.getPlaces().length);\n        //     const placeMappings = this.createPlaceMappings(fromHorPoule, toPlaces);\n        //     previousRule = new HorizontalSingleQualifyRule(fromHorPoule, qualifyGroup, placeMappings, previousRule);\n        //     fromHorPoule = fromRoundHorPoules.shift();\n        // }\n        // if (fromHorPoule !== undefined && childRoundPlaces.length > 0 && childRoundPlaces !== undefined) {\n        //     new HorizontalMultipleQualifyRule(fromHorPoule, qualifyGroup, childRoundPlaces);\n        // }   \n        \n        const childRound = qualifyGroup.getChildRound();\n        let nrOfChildRoundPlaces = childRound.getNrOfPlaces();\n        const fromHorPoules: HorizontalPoule[] = [];\n        while (nrOfChildRoundPlaces > 0) {\n            \n            const fromRoundHorPoule = fromRoundHorPoules.shift();\n            if (fromRoundHorPoule === undefined) {\n                throw new Error('fromRoundHorPoule should not be undefined');\n            }\n            fromHorPoules.push(fromRoundHorPoule);\n            nrOfChildRoundPlaces -= fromRoundHorPoule.getPlaces().length;\n            \n        }\n        this.createRulesFromHorPoules(fromHorPoules, qualifyGroup);\n    }\n\n    protected createRulesFromHorPoules(fromHorPoules: HorizontalPoule[], qualifyGroup: QualifyGroup) {\n        const childRoundPlaces = this.getChildRoundPlacesLikeSnake(qualifyGroup);\n        let fromHorPoule: HorizontalPoule | undefined = fromHorPoules.shift();\n        let previousRule: HorizontalSingleQualifyRule | undefined;\n        while (fromHorPoule !== undefined && childRoundPlaces.length >= fromHorPoule.getPlaces().length) {\n            const toPlaces = childRoundPlaces.splice(0, fromHorPoule.getPlaces().length);\n            const placeMappings = this.createByPlaceMappings(fromHorPoule, toPlaces);\n            previousRule = new HorizontalSingleQualifyRule(fromHorPoule, qualifyGroup, placeMappings, previousRule);\n            fromHorPoule = fromHorPoules.shift();\n        }\n        if (fromHorPoule !== undefined && childRoundPlaces.length > 0 ) {\n            new HorizontalMultipleQualifyRule(fromHorPoule, qualifyGroup, childRoundPlaces);\n        }\n\n    }\n\n    protected getChildRoundPlacesLikeSnake(qualifyGroup: QualifyGroup): Place[] {\n        const horPoules = qualifyGroup.getChildRound().getHorizontalPoules(qualifyGroup.getTarget());\n        const places: Place[] = [];\n        let reverse = false;\n        horPoules.forEach((horPoule: HorizontalPoule) => {\n            const horPoulePlaces = horPoule.getPlaces().slice();\n            let horPoulePlace: Place | undefined = reverse ? horPoulePlaces.pop() : horPoulePlaces.shift();\n            while (horPoulePlace !== undefined) {\n                places.push(horPoulePlace);\n                horPoulePlace = reverse ? horPoulePlaces.pop() : horPoulePlaces.shift();\n            }\n            reverse = !reverse;\n        })\n        return places;\n    }\n\n    createByPlaceMappings(fromHorPoule: HorizontalPoule, childRoundPlaces: Place[]): QualifyMappingByPlace[] {\n        const picker = new FromPoulePicker(this.possibleFromMap);\n        const mappings: QualifyMappingByPlace[] = [];\n        const fromHorPoulePlaces = fromHorPoule.getPlaces().slice();\n        let childRoundPlace: Place | undefined;\n        while (childRoundPlace = childRoundPlaces.shift()) {\n            const bestFromPoule = picker.getBestFromPoule(\n                childRoundPlace.getPoule(),\n                fromHorPoulePlaces.map((place: Place) => place.getPoule()),\n                childRoundPlaces.map((place: Place) => place.getPoule()));\n\n            const bestFromPlace = this.removeBestHorizontalPlace(fromHorPoulePlaces, bestFromPoule);\n            const placeMapping = new QualifyMappingByPlace(bestFromPlace, childRoundPlace);\n            mappings.push(placeMapping);\n            this.possibleFromMap.addMappingToMap(placeMapping);\n        }\n        return mappings;\n    }\n\n    protected removeBestHorizontalPlace(fromHorPoulePlaces: Place[], bestFromPoule: Poule): Place {\n        const bestPouleNr = bestFromPoule.getNumber();\n        const fromPlaces = fromHorPoulePlaces.filter((place: Place) => place.getPouleNr() === bestPouleNr);\n        const bestFromPlace = fromPlaces[0];\n        if (bestFromPlace === undefined) {\n            throw new Error('fromPlace should be found');\n        }\n        const idx = fromHorPoulePlaces.indexOf(bestFromPlace);\n        if (idx < 0) {\n            throw new Error('fromPlace should be found');\n        }\n        fromHorPoulePlaces.splice(idx, 1);\n        return bestFromPlace;\n    }\n}","import { Place } from \"../../place\";\nimport { QualifyMapping } from \"../mapping\";\n\nexport class QualifyMappingByRank extends QualifyMapping {\n    constructor(private fromRank: number, toPlace: Place) {\n        super(toPlace);\n    }\n\n    getFromRank(): number {\n        return this.fromRank;\n    }\n}\n","import { HorizontalPoule } from '../../poule/horizontal';\nimport { QualifyRule } from '../rule';\n\nexport abstract class VerticalQualifyRule extends QualifyRule{\n    \n    constructor(fromHorizontalPoule: HorizontalPoule) {\n        super(fromHorizontalPoule);\n    }   \n}\n\n","import { HorizontalPoule } from '../../../poule/horizontal';\nimport { Place } from '../../../place';\nimport { QualifyGroup } from '../../group';\nimport { VerticalQualifyRule } from '../vertical';\nimport { QualifyTarget } from '../../target';\n\nexport class VerticalMultipleQualifyRule extends VerticalQualifyRule {\n\n    constructor(\n        fromHorizontalPoule: HorizontalPoule,\n        group: QualifyGroup,\n        private toPlaces: Place[]) {\n\n        super(fromHorizontalPoule);\n        this.fromHorizontalPoule.setQualifyRuleNew(this);\n        group.setMultipleRule(this);\n        \n    }\n\n    public getAbsoluteRankByToPlace(toPlace: Place): number {\n        const idx = this.toPlaces.indexOf(toPlace);\n        if (this.getQualifyTarget() === QualifyTarget.Losers) {\n            const nrOfHorPlaces = this.getFromHorizontalPoule().getPlaces().length;\n            return idx < 0 ? 0 : nrOfHorPlaces - idx;\n        }\n        return idx < 0 ? 0 : idx + 1;\n    }\n\n    getToPlaces(): Place[] {\n        return this.toPlaces;\n    }\n\n    getNrOfToPlaces(): number {\n        return this.toPlaces.length;\n    }\n\n    public getNrOfDropouts(): number {\n        return this.fromHorizontalPoule.getPlaces().length - this.getNrOfToPlaces();\n    }\n\n    // getFromPlace(toPlace: Place): Place {\n\n    //     public getToPlaceNumber(place: Place): number {\n    //         const idx = this.toPlaces.indexOf(place);\n    //         return idx < 0 ? 0 : idx + 1;\n    //     }\n\n\n    //     const mapping = this.getMappings().find((placeMapping: QualifyPlaceMapping): boolean => {\n    //         return placeMapping.getToPlace() === toPlace;\n    //     });\n    //     if (mapping === undefined) {\n    //         throw Error('could not find fromPlace');\n    //     }\n    //     return mapping.getFromPlace();\n    // }\n\n    /*toPlacesComplete(): boolean {\n        return this.nrOfToPlaces === this.toPlaces.length;\n    }*/\n\n    // getFromPlace(toPlace: Place): Place {\n    //     const mapping = this.getMappings().find((placeMapping: QualifyPlaceMapping): boolean => {\n    //         return placeMapping.getToPlace() === toPlace;\n    //     });\n    //     if (mapping === undefined) {\n    //         throw Error('could not find fromPlace');\n    //     }\n    //     return mapping.getFromPlace();\n    // }\n\n    // public getToPlaceNumber(place: Place): number {\n    //     const idx = this.toPlaces.indexOf(place);\n    //     return idx < 0 ? 0 : idx + 1;\n    // }\n\n    hasToPlace(place: Place): boolean {\n        return this.toPlaces.indexOf(place) >= 0;\n    }\n\n    detach() {\n        this.getFromHorizontalPoule().setQualifyRuleNew(undefined);\n        \n    }\n\n    getGroup(): QualifyGroup {\n        const target = this.getQualifyTarget();\n        const qualifGroup = this.getFromRound().getQualifyGroups(target).find((qualifyGroup: QualifyGroup) => {\n            return this === qualifyGroup.getMultipleRule();\n        });\n        if (qualifGroup === undefined) {\n            throw Error('voor de multiple-kwalificatieregel kan geen groep worden gevonden');\n        }\n        return qualifGroup;\n    }\n}\n\n","import { QualifyGroup } from '../../group';\nimport { Place } from '../../../place';\nimport { VerticalQualifyRule } from '../vertical';\nimport { VerticalMultipleQualifyRule } from './multiple';\nimport { QualifyTarget } from '../../target';\nimport { HorizontalPoule } from '../../../poule/horizontal';\nimport { QualifyMappingByRank } from '../../mapping/byRank';\n\nexport class VerticalSingleQualifyRule extends VerticalQualifyRule {\n\n    protected next: VerticalSingleQualifyRule | undefined;\n    \n    constructor(\n        fromHorizontalPoule: HorizontalPoule,\n        group: QualifyGroup,\n        private byRankMappings: QualifyMappingByRank[],\n        private previous: VerticalSingleQualifyRule | undefined) {\n            \n        super(fromHorizontalPoule);\n        this.fromHorizontalPoule.setQualifyRuleNew(this);\n\n        if (this.previous !== undefined) {\n            this.previous.setNext(this);\n        } else {\n            group.setFirstSingleRule(this);\n        }\n    }\n\n    getMappings(): QualifyMappingByRank[] {\n        return this.byRankMappings;\n    }\n\n    public getToPlaces(): Place[] {\n        return this.getMappings().map((byRankMapping: QualifyMappingByRank): Place => {\n            return byRankMapping.getToPlace();\n        });\n    }\n\n    getMappingByToPlace(toPlace: Place): QualifyMappingByRank | undefined {\n        return this.getMappings().find((byRankMapping: QualifyMappingByRank): boolean => {\n            return byRankMapping.getToPlace() === toPlace;\n        });\n    }\n\n    getNrOfMappings(): number {\n        return this.byRankMappings.length;\n    }\n\n    // public getToPlaceIndex(toPlace: Place): number {\n    //     let rank = 0;\n    //     this.getMappings().every((mapping: QualifyPlaceMapping) => {\n    //         rank++;\n    //         if (mapping.getToPlace() === toPlace) {\n    //             return false;\n    //         }\n    //         return true;\n    //     });\n    //     return rank;\n    // }\n\n    // hasToPlace(toPlace: Place): boolean {\n    //     try {\n    //         this.getFromPlace(toPlace);\n    //         return true;\n    //     } catch (error) {\n    //     }\n    //     return false;\n    // }\n\n    // getNrOfToPlaces(): number {\n    //     return this.placeMappings.length;\n    // }\n\n    // public getNrOfDropouts(): number {\n    //     return this.fromHorizontalPoule.getPlaces().length - this.getNrOfToPlaces();\n    // }\n\n    getFirst(): VerticalSingleQualifyRule | VerticalMultipleQualifyRule {\n        const previous = this.getPrevious();\n        if (previous !== undefined) {\n            return previous.getFirst();\n        }\n        return this;\n    }\n\n    getLast(): VerticalSingleQualifyRule | VerticalMultipleQualifyRule {\n        const next = this.getNext();\n        if (next !== undefined) {\n            return next.getLast();\n        }\n        return this;\n    }\n\n    getPrevious(): VerticalSingleQualifyRule | undefined {\n        return this.previous;\n    }\n\n    setNext(next: VerticalSingleQualifyRule | undefined): void {\n        this.next = next;\n    }\n\n    getNext(): VerticalSingleQualifyRule | undefined {\n        return this.next;\n    }\n\n    setPrevious(previous: VerticalSingleQualifyRule | undefined): void {\n        this.previous = previous;\n    }\n\n    getNeighbour(targetSide: QualifyTarget): VerticalSingleQualifyRule | undefined {\n        return targetSide === QualifyTarget.Winners ? this.previous : this.next;\n    }\n\n    getNrOfToPlacesTargetSide(targetSide: QualifyTarget): number {\n        let nrOfToPlacesTargetSide = 0;\n        let neighBour: VerticalSingleQualifyRule | undefined = this.getNeighbour(targetSide);\n        if (neighBour === undefined) {\n            return nrOfToPlacesTargetSide;\n        }\n        return neighBour.getNrOfMappings() + neighBour.getNrOfToPlacesTargetSide(targetSide);\n    }\n\n    detach() {\n        const next = this.getNext();\n        if (next !== undefined) {\n            next.detach();\n            this.setNext(undefined);\n        }\n        this.getFromHorizontalPoule().setQualifyRuleNew(undefined);\n        this.setPrevious(undefined);\n    }\n\n    getGroup(): QualifyGroup {\n        const target = this.getQualifyTarget();\n        const firstSingleRule = this.getFirst()\n        const qualifGroup = this.getFromRound().getQualifyGroups(target).find((qualifyGroup: QualifyGroup) => {\n            return firstSingleRule === qualifyGroup.getFirstSingleRule();\n        });\n        if (qualifGroup === undefined) {\n            throw Error('voor de single-kwalificatieregel kan geen groep worden gevonden');\n        }\n        return qualifGroup;\n    }\n}\n\n","import { Place } from \"../../../place\";\nimport { Poule } from \"../../../poule\";\nimport { HorizontalPoule } from \"../../../poule/horizontal\";\nimport { QualifyGroup, Round } from \"../../group\";\nimport { QualifyMappingByRank } from \"../../mapping/byRank\";\nimport { QualifyTarget } from \"../../target\";\nimport { VerticalMultipleQualifyRule } from \"../vertical/multiple\";\nimport { VerticalSingleQualifyRule } from \"../vertical/single\";\n\nexport class VerticalQualifyRuleCreator {\n\n    constructor() {\n    }\n\n    public createRules(fromRoundHorPoules: HorizontalPoule[], qualifyGroup: QualifyGroup): HorizontalPoule[] {\n            \n        const childRound = qualifyGroup.getChildRound();\n        let childPlaces = this.getRoundPlaces(childRound);\n        const qualifyTarget = qualifyGroup.getTarget();\n        if (qualifyTarget  === QualifyTarget.Losers) {\n            childPlaces.reverse();\n        }\n        \n        let fromHorPoule: HorizontalPoule|undefined;\n        let fromHorPoulePlaces: Place[] = [];\n        let previous: VerticalSingleQualifyRule | undefined;\n        while (childPlaces.length > 0 && fromRoundHorPoules.length > 0) {\n            if (fromHorPoulePlaces.length === 0) {\n                fromHorPoule = fromRoundHorPoules.shift();\n                fromHorPoulePlaces = fromHorPoule.getPlaces().slice();\n            }\n        \n            // SingleRule\n            if( fromHorPoulePlaces.length <= childPlaces.length) {                \n                const placeMappings = this.fromPlacesToByRankMappings(qualifyTarget, fromHorPoulePlaces, childPlaces);\n                previous = new VerticalSingleQualifyRule(fromHorPoule, qualifyGroup, placeMappings, previous );                    \n            } else {\n                const toPlaces = [];\n                let nrOfHorPoulePlaces = fromHorPoulePlaces.length;\n                while (nrOfHorPoulePlaces-- > 0 && childPlaces.length > 0 ) {                        \n                    toPlaces.push(childPlaces.shift());\n                    // placeMappings.push(new QualifyPlaceMapping(fromHorPoulePlace, childPlace));\n                }\n                new VerticalMultipleQualifyRule(fromHorPoule, qualifyGroup, toPlaces );\n            }   \n        };\n        return fromRoundHorPoules;      \n    }\n\n    protected getRoundPlaces(round: Round): Place[] {\n        let roundPlacesByPoule = this.getRoundPlacesByPoule(round, QualifyTarget.Winners);\n        let roundPlaces: Place[] = [];\n        roundPlacesByPoule.forEach((pouleRoundPlaces: Place[] ) => {\n            roundPlaces = roundPlaces.concat(pouleRoundPlaces)\n        });\n        return roundPlaces;\n    }\n\n    protected getRoundPlacesByPoule(round: Round, target: QualifyTarget): (Place[])[] {\n        if ( target === QualifyTarget.Losers) {\n            return round.getPoules().slice().reverse().map((poule: Poule): Place[] => {\n                return poule.getPlaces().slice();\n            })    \n        }\n        return round.getPoules().map((poule: Poule): Place[] => {\n            return poule.getPlaces().slice();\n        })\n    }\n\n    protected fromPlacesToByRankMappings(\n        qualifyTarget: QualifyTarget, fromHorPoulePlaces: Place[], childPlaces: Place[]): QualifyMappingByRank[] {\n        const mapping = [];\n        let rank = qualifyTarget === QualifyTarget.Losers ? fromHorPoulePlaces.length : 1;\n\n        let fromHorPoulePlace = fromHorPoulePlaces.shift();\n        while (fromHorPoulePlace !== undefined) {\n            \n            const childPoulePlace = childPlaces.shift();\n            if( childPoulePlace === undefined ) {\n                throw new Error('childPoulePlace should not be undefined');\n            }\n            mapping.push(new QualifyMappingByRank(rank, childPoulePlace ) );\n            qualifyTarget === QualifyTarget.Losers ? rank-- : rank++;\n            \n            fromHorPoulePlace = fromHorPoulePlaces.shift();\n        }\n        return mapping;\n    }      \n}","import { QualifyDistribution } from '../distribution';\nimport { QualifyGroup, Round } from '../group';\nimport { QualifyTarget } from '../target';\nimport { HorizontalQualifyRuleCreator } from './creator/horizontal';\nimport { VerticalQualifyRuleCreator } from './creator/vertical';\n\nexport class QualifyRuleCreator {\n\n    constructor() {\n    }\n\n    remove(...parentRounds: (Round | undefined)[]) {\n        parentRounds.forEach((parentRound: Round | undefined) => {\n            if (parentRound === undefined) {\n                return;\n            }\n            parentRound.getQualifyGroups().forEach((qualifyGroup: QualifyGroup) => {\n                qualifyGroup.detachRules();\n            });\n        });\n    }\n\n    create(...parentRounds: (Round | undefined)[]) {\n        [QualifyTarget.Winners, QualifyTarget.Losers].forEach((target: QualifyTarget) => {\n            parentRounds.forEach((parentRound: Round | undefined) => {\n                if (parentRound === undefined) {\n                    return;\n                }\n                const fromRoundHorPoules = parentRound.getHorizontalPoules(target).slice();\n                parentRound.getQualifyGroups(target).forEach((qualifyGroup: QualifyGroup) => {\n                    if( qualifyGroup.getDistribution() === QualifyDistribution.HorizontalSnake ) {\n                        const childRound = qualifyGroup.getChildRound();\n                        const horizontalCreator = new HorizontalQualifyRuleCreator(childRound);\n                        horizontalCreator.createRules(fromRoundHorPoules, qualifyGroup);\n                    } else {\n                        const verticalCreator = new VerticalQualifyRuleCreator();\n                        verticalCreator.createRules(fromRoundHorPoules, qualifyGroup);\n                    }                    \n                });\n            })\n        });\n    }\n}","import { Category } from \"../category\";\nimport { GameState } from \"../game/state\";\nimport { Poule } from \"../poule\";\nimport { Round } from \"../qualify/group\";\nimport { RoundNumber } from \"../round/number\";\n\nexport class StructureCell {\n    private rounds: Round[] = [];\n    // protected next: StructureCell | undefined;\n\n    constructor(\n        private category: Category,\n        private roundNumber: RoundNumber) {\n        category.getStructureCells().push(this);\n        roundNumber.setStructureCell(this);\n    }\n\n    getCategory(): Category {\n        return this.category;\n    }\n\n    getRoundNumber(): RoundNumber {\n        return this.roundNumber;\n    }\n\n    getRounds(): Round[] {\n        return this.rounds;\n    }\n\n    getPoules(): Poule[] {\n        let poules: Poule[] = [];\n        this.getRounds().forEach((round: Round) => {\n            poules = poules.concat(round.getPoules());\n        });\n        return poules;\n    }\n\n    // hasNext(): boolean {\n    //     return this.next !== undefined;\n    // }\n\n    getNext(): StructureCell | undefined {\n        const nextRoundNumber = this.roundNumber.getNext();\n        if (nextRoundNumber === undefined) {\n            return undefined;\n        }\n        try {\n            return nextRoundNumber.getStructureCell(this.getCategory());\n        } catch (e) {\n        }\n        return undefined;\n\n    }\n\n    createNext(): StructureCell {\n        let nextRoundNumber = this.roundNumber.getNext();\n        if (nextRoundNumber === undefined) {\n            nextRoundNumber = this.roundNumber.createNext();\n        }\n        return new StructureCell(this.category, nextRoundNumber);\n    }\n\n    // detachFromNext() {\n    //     this.next = undefined;\n    // }\n\n    // getFirst(): StructureCell {\n    //     const previous = this.getPrevious();\n    //     return previous ? previous.getFirst() : this;\n    // }\n\n    // isFirst(): boolean {\n    //     return (this.getPrevious() === undefined);\n    // }\n\n    // hasPrevious(): boolean {\n    //     return this.previous !== undefined;\n    // }\n\n    // getPrevious(): StructureCell | undefined {\n    //     return this.previous;\n    // }\n\n    getLast(): StructureCell {\n        const next = this.getNext();\n        return next !== undefined ? next.getLast() : this;\n    }\n\n    // removeNext() {\n    //     this.next = undefined;\n    // }\n\n    // detachFromPrevious(): void {\n    //     if (this.previous === undefined) {\n    //         return;\n    //     }\n    //     this.previous.removeNext();\n    //     this.previous = undefined;\n    // }\n\n    detach() {\n\n        const nextRoundNumber = this.getRoundNumber().getNext();\n        if (nextRoundNumber !== undefined) {\n            try {\n                const next = this.getCategory().getStructureCell(nextRoundNumber);\n                next.detach();\n            }\n            catch (e) {\n            }\n        }\n\n        this.getRoundNumber().clearStructureCell(this.getCategory());\n        if (this.getRoundNumber().getStructureCells().length === 0) {\n            this.getRoundNumber().detach();\n        }\n    }\n\n\n    getGamesState(): GameState {\n        if (this.getRounds().every(round => round.getGamesState() === GameState.Finished)) {\n            return GameState.Finished;\n        } else if (this.getRounds().some(round => round.getGamesState() !== GameState.Created)) {\n            return GameState.InProgress;\n        }\n        return GameState.Created;\n    }\n\n    hasBegun(): boolean {\n        return this.getGamesState() > GameState.Created;\n    }\n\n    needsRanking(): boolean {\n        return this.getRounds().some(round => round.needsRanking());\n    }\n}\n\n\n// export class StructureCellMap extends Map<number, Category> { };","import { Injectable } from '@angular/core';\nimport { Category } from '../../category';\nimport { RoundNumber } from '../../round/number';\nimport { StructureCell } from '../cell';\nimport { JsonStructureCell } from './json';\n\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class StructureCellMapper {\n\n    constructor(\n    ) {\n    }\n\n    toObject(jsonCell: JsonStructureCell, category: Category, roundNumber: RoundNumber): StructureCell {\n        const cell = new StructureCell(category, roundNumber);\n        const nextRoundNumber = roundNumber.getNext();\n        if (nextRoundNumber !== undefined && jsonCell.next) {\n            this.toObject(jsonCell.next, category, nextRoundNumber);\n        }\n        return cell;\n    }\n\n    toJson(cell: StructureCell | undefined): JsonStructureCell {\n        if (cell === undefined) {\n            return undefined;\n        }\n        return {\n            next: this.toJson(cell.getNext())\n        };\n    }\n}\n","import { Round } from '../group';\nimport { RoundMapper } from '../../round/mapper';\nimport { QualifyGroup } from '../group';\nimport { JsonQualifyGroup } from './json';\nimport { StructureCell } from '../../structure/cell';\n\nexport class QualifyGroupMapper {\n    constructor(private roundMapper: RoundMapper) { }\n\n    toObject(json: JsonQualifyGroup, round: Round, nextStructureCell: StructureCell): QualifyGroup {\n        const qualifyGroup = new QualifyGroup(round, json.target, nextStructureCell, json.number);\n        qualifyGroup.setId(json.id);\n        qualifyGroup.setDistribution(json.distribution);\n        this.roundMapper.toObject(json.childRound, qualifyGroup.getChildRound());\n        return qualifyGroup;\n    }\n\n    toJson(qualifyGroup: QualifyGroup): JsonQualifyGroup {\n        return {\n            id: qualifyGroup.getId(),\n            target: qualifyGroup.getTarget(),\n            distribution: qualifyGroup.getDistribution(),\n            number: qualifyGroup.getNumber(),\n            childRound: this.roundMapper.toJson(qualifyGroup.getChildRound())\n        };\n    }\n}\n","import { Place } from '../place';\nimport { Round } from '../qualify/group';\nimport { HorizontalMultipleQualifyRule } from '../qualify/rule/horizontal/multiple';\nimport { HorizontalSingleQualifyRule } from '../qualify/rule/horizontal/single';\nimport { VerticalMultipleQualifyRule } from '../qualify/rule/vertical/multiple';\nimport { VerticalSingleQualifyRule } from '../qualify/rule/vertical/single';\nimport { QualifyTarget } from '../qualify/target';\n\n/**\n * QualifyTarget.Winners\n *  [ A1 B1 C1 ]\n *  [ A2 B2 C2 ]\n *  [ A3 B3 C3 ]\n * QualifyTarget.Losers\n *  [ C3 B3 A3 ]\n *  [ C2 B2 A2 ]\n *  [ C1 B1 A1 ]\n *\n **/\nexport class HorizontalPoule {\n    protected number: number\n    protected qualifyRule: HorizontalMultipleQualifyRule | HorizontalSingleQualifyRule | VerticalMultipleQualifyRule | VerticalSingleQualifyRule | undefined;\n\n    constructor(\n        protected round: Round,\n        protected qualifyTarget: QualifyTarget,\n        protected previous: HorizontalPoule | undefined,\n        protected places: Place[]) {\n        round.getHorizontalPoules(this.qualifyTarget).push(this);\n        this.number = previous ? previous.getNumber() + 1 : 1;\n    }\n\n    getRound(): Round {\n        return this.round;\n    }\n\n    getQualifyTarget(): QualifyTarget {\n        return this.qualifyTarget;\n    }\n\n    getNumber(): number {\n        return this.number;\n    }\n\n    getAbsoluteNumber(): number {\n        if (this.getQualifyTarget() !== QualifyTarget.Losers) {\n            return this.number;\n        }\n        const nrOfPlaceNubers = this.round.getHorizontalPoules(QualifyTarget.Winners).length;\n        return nrOfPlaceNubers - (this.number - 1);\n    }\n\n    /*getQualifyGroup(): QualifyGroup | undefined {\n        return this.qualifyRule?.getGroup();\n    }*/\n\n    setQualifyRuleNew(qualifyRule: HorizontalMultipleQualifyRule | HorizontalSingleQualifyRule | VerticalMultipleQualifyRule | VerticalSingleQualifyRule | undefined) {\n        this.qualifyRule = qualifyRule;\n    }\n\n    /*protected getMultipleQualifyRule(): MultipleQualifyRule | undefined {\n        return this.multipleRule;\n    }\n\n    setQualifyRule(multipleRule: MultipleQualifyRule | SingleQualifyRule) {\n        this.qualifyRule = multipleRule;\n    }*/\n\n    getQualifyRuleNew(): HorizontalMultipleQualifyRule | HorizontalSingleQualifyRule | VerticalMultipleQualifyRule | VerticalSingleQualifyRule | undefined {\n        return this.qualifyRule;\n    }\n\n    /*setQualifyRulesSingle(singleRules: SingleQualifyRule[]) {\n        this.singleRules = singleRules;\n    }*/\n\n    getPlaces(): Place[] {\n        return this.places;\n    }\n\n    getFirstPlace(): Place {\n        return this.places[0];\n    }\n\n    hasPlace(place: Place): boolean {\n        return this.getPlaces().find(placeIt => placeIt === place) !== undefined;\n    }\n\n    // next(): Poule {\n    //     const poules = this.getRound().getPoules();\n    //     return poules[this.getNumber()];\n    // }\n\n    /*isBorderPoule(): boolean {\n        const qualifyGroup = this.getQualifyGroup();\n        if (qualifyGroup === undefined || !qualifyGroup.isBorderGroup()) {\n            return false;\n        }\n        const horPoules = qualifyGroup.getHorizontalPoules();\n        return horPoules[horPoules.length - 1] === this;\n    }*/\n\n    /*getNrOfQualifiers(): number {\n        const qualifyRule = this.getQualifyRule();\n        if (qualifyRule === undefined) {\n            return 0;\n        }\n        if (qualifyRule instanceof SingleQualifyRule) {\n            return qualifyRule.getMappings().length;\n        }\n        return qualifyRule.getToPlaces().length;\n    }*/\n}\n","import { Place } from '../../place';\nimport { Poule } from '../../poule';\nimport { Round } from '../../qualify/group';\nimport { QualifyTarget } from '../../qualify/target';\nimport { HorizontalPoule } from '../horizontal';\n\nexport class HorizontalPouleCreator {\n\n    remove(...rounds: (Round | undefined)[]) {\n        rounds.forEach((round: Round | undefined) => {\n            if (round === undefined) {\n                return;\n            }\n            [QualifyTarget.Winners, QualifyTarget.Losers].forEach((target: QualifyTarget) => {\n                this.removeRound(round, target);\n            });\n        });\n    }\n\n    protected removeRound(round: Round, target: QualifyTarget) {\n        const horizontalPoules = round.getHorizontalPoules(target);\n        while (horizontalPoules.length > 0) {\n            horizontalPoules.pop()\n        }\n    }\n\n    create(...rounds: (Round | undefined)[]) {\n        rounds.forEach((round: Round | undefined) => {\n            if (round === undefined) {\n                return;\n            }\n            [QualifyTarget.Winners, QualifyTarget.Losers].forEach((target: QualifyTarget) => {\n                this.createRoundHorizontalPoules(round, target);\n            });\n        });\n    }\n\n    protected createRoundHorizontalPoules(round: Round, qualifyTarget: QualifyTarget): HorizontalPoule[] {\n        const horizontalPoules = round.getHorizontalPoules(qualifyTarget);\n\n        const placesHorizontalOrdered = this.getPlacesHorizontal(round);\n        if (qualifyTarget === QualifyTarget.Losers) {\n            placesHorizontalOrdered.reverse();\n        }\n\n        const nrOfPoules = round.getPoules().length;\n        let horPlaces = placesHorizontalOrdered.splice(0, nrOfPoules);\n        let previous: HorizontalPoule | undefined;\n        while (horPlaces.length > 0) {\n            previous = new HorizontalPoule(round, qualifyTarget, previous, horPlaces);\n            horPlaces = placesHorizontalOrdered.splice(0, nrOfPoules);\n        }\n        return horizontalPoules;\n    }\n\n    protected getPlacesHorizontal(round: Round): Place[] {\n        let places: Place[] = [];\n        round.getPoules().forEach((poule: Poule) => {\n            places = places.concat(poule.getPlaces());\n        });\n        places.sort((placeA: Place, placeB: Place) => {\n            if (placeA.getPlaceNr() === placeB.getPlaceNr()) {\n                return placeA.getPouleNr() - placeB.getPouleNr();\n            }\n            return placeA.getPlaceNr() - placeB.getPlaceNr();\n            // if (placeA.getNumber() > placeB.getNumber()) {\n            //     return 1;\n            // }\n            // if (placeA.getNumber() < placeB.getNumber()) {\n            //     return -1;\n            // }\n            // if (placeA.getPoule().getNumber() > placeB.getPoule().getNumber()) {\n            //     return 1;\n            // }\n            // if (placeA.getPoule().getNumber() < placeB.getPoule().getNumber()) {\n            //     return -1;\n            // }\n            // return 0;\n        });\n        return places;\n    }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Poule } from '../poule';\nimport { Place } from '../place';\nimport { JsonPlace } from './json';\nimport { JsonPlaceLocation } from './location/json';\nimport { PlaceLocation } from './location';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class PlaceMapper {\n    constructor() {\n    }\n\n    toObject(json: JsonPlace, poule: Poule, place?: Place): Place {\n        if (place === undefined) {\n            place = new Place(poule, json.placeNr);\n        }\n        place.setId(json.id);\n        place.setExtraPoints(json.extraPoints);\n        if (json.qualifiedPlaceLocation) {\n            const qualifiedPlaceLocation = new PlaceLocation(json.qualifiedPlaceLocation.pouleNr, json.qualifiedPlaceLocation.placeNr);\n            place.setQualifiedPlace(\n                poule.getRound().getParentQualifyGroup()?.getParentRound().getPlace(qualifiedPlaceLocation)\n            );\n        }\n        return place;\n    }\n\n    toLocation(jsonPlaceLocation: JsonPlaceLocation): PlaceLocation {\n        return new PlaceLocation(jsonPlaceLocation.pouleNr, jsonPlaceLocation.placeNr);\n    }\n\n    toJson(place: Place): JsonPlace {\n        return {\n            id: place.getId(),\n            pouleNr: place.getPouleNr(),\n            placeNr: place.getPlaceNr(),\n            extraPoints: place.getExtraPoints(),\n            qualifiedPlaceLocation: undefined\n        };\n    }\n\n    toJsonLocation(place: Place): JsonPlaceLocation {\n        return {\n            placeNr: place.getPlaceNr(),\n            pouleNr: place.getPoule().getNumber()\n        };\n    }\n}\n\nexport interface PlaceMap {\n    [key: string]: Place;\n}\n","import { Injectable } from '@angular/core';\n\nimport { Poule } from '../poule';\nimport { PlaceMapper } from '../place/mapper';\nimport { JsonPoule } from './json';\nimport { Round } from '../qualify/group';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class PouleMapper {\n    constructor(private placeMapper: PlaceMapper) { }\n\n    toObject(json: JsonPoule, round: Round, existingPoule: Poule | undefined): Poule {\n        const poule = existingPoule ? existingPoule : new Poule(round, json.number);\n        poule.setId(json.id);\n        poule.setName(json.name);\n        json.places.sort((placeA, placeB) => (placeA.placeNr > placeB.placeNr) ? 1 : -1);\n        json.places.map(jsonPlace => this.placeMapper.toObject(jsonPlace, poule));\n        return poule;\n    }\n\n    toJson(poule: Poule): JsonPoule {\n        return {\n            id: poule.getId(),\n            number: poule.getNumber(),\n            name: poule.getName(),\n            places: poule.getPlaces().map(place => this.placeMapper.toJson(place)),\n            againstGames: [], //poule.getAgainstGames().map(game => this.gameMapper.toJsonAgainst(game)),\n            togetherGames: [], // poule.getTogetherGames().map(game => this.gameMapper.toJsonTogether(game))\n        };\n    }\n}\n","export enum ScoreDirection {\n    Upwards = 1,\n    DownWards\n}","import { Round } from '../qualify/group';\nimport { Identifiable } from '../identifiable';\nimport { CompetitionSport } from '../competition/sport';\nimport { Sport } from '../sport';\nimport { ScoreDirection } from './direction';\n\nexport class ScoreConfig extends Identifiable {\n\n    protected previous: ScoreConfig | undefined;\n    protected direction: number = ScoreDirection.Upwards;\n    protected maximum: number = 0;\n    protected enabled: boolean = true;\n    protected next: ScoreConfig | undefined;\n\n    constructor(protected competitionSport: CompetitionSport, protected round: Round, previous?: ScoreConfig) {\n        super();\n        if (previous === undefined) {\n            round.getScoreConfigs().push(this);\n        } else {\n            this.setPrevious(previous);\n        }\n    }\n\n    getCompetitionSport(): CompetitionSport {\n        return this.competitionSport;\n    }\n\n    getSport(): Sport {\n        return this.competitionSport.getSport();\n    }\n\n    getRound(): Round {\n        return this.round;\n    }\n\n    // moet direction opgenomen worden in constructor\n    getDirection(): number {\n        return this.direction;\n    }\n\n    setDirection(direction: number) {\n        this.direction = direction;\n    }\n\n    getMaximum(): number {\n        return this.maximum;\n    }\n\n    setMaximum(maximum: number) {\n        this.maximum = maximum;\n    }\n\n    hasMaximum(): boolean {\n        return this.maximum > 0;\n    }\n\n    getEnabled(): boolean {\n        return this.enabled;\n    }\n\n    setEnabled(enabled: boolean) {\n        this.enabled = enabled;\n    }\n\n    hasPrevious(): boolean {\n        return this.previous !== undefined;\n    }\n\n    getPrevious(): ScoreConfig | undefined {\n        return this.previous;\n    }\n\n    private setPrevious(previous: ScoreConfig) {\n        this.previous = previous;\n        if (this.previous !== undefined) {\n            this.previous.setNext(this);\n        }\n    }\n\n    getFirst(): ScoreConfig {\n        const previous = this.getPrevious();\n        return previous ? previous.getLast() : this;\n    }\n\n    isFirst(): boolean {\n        return !this.hasPrevious();\n    }\n\n    getNext(): ScoreConfig | undefined {\n        return this.next;\n    }\n\n    setNext(next: ScoreConfig) {\n        this.next = next;\n    }\n\n    hasNext(): boolean {\n        return this.next !== undefined;\n    }\n\n    getLast(): ScoreConfig {\n        const next = this.getNext();\n        return next ? next.getLast() : this;\n    }\n\n    isLast(): boolean {\n        return !this.hasNext();\n    }\n\n    getCalculate(): ScoreConfig {\n        const firstNext = this.getFirst().getNext();\n        return firstNext?.getEnabled() ? firstNext : this;\n    }\n\n    useSubScore(): boolean {\n        return (this !== this.getCalculate());\n    }\n}\n\n","import { Injectable } from '@angular/core';\nimport { ScoreConfig } from '../config';\nimport { Round } from '../../qualify/group';\nimport { JsonScoreConfig } from './json';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class ScoreConfigMapper {\n\n    constructor() {\n    }\n\n    toObject(json: JsonScoreConfig, round: Round, config?: ScoreConfig, previous?: ScoreConfig): ScoreConfig {\n        if (config === undefined) {\n            const competitionSport = round.getCompetition().getSportById(json.competitionSportId);\n            config = new ScoreConfig(competitionSport, round, previous);\n        }\n        config.setId(json.id);\n        config.setDirection(json.direction);\n        config.setMaximum(json.maximum);\n        config.setEnabled(json.enabled);\n        if (json.next !== undefined) {\n            this.toObject(json.next, round, config.getNext(), config);\n        }\n\n        return config;\n    }\n\n    toJson(scoreConfig: ScoreConfig): JsonScoreConfig {\n        const nextScoreConfig = scoreConfig.getNext();\n        return {\n            id: scoreConfig.getId(),\n            competitionSportId: scoreConfig.getCompetitionSport().getId(),\n            direction: scoreConfig.getDirection(),\n            maximum: scoreConfig.getMaximum(),\n            enabled: scoreConfig.getEnabled(),\n            next: nextScoreConfig ? this.toJson(nextScoreConfig) : undefined,\n            isFirst: scoreConfig.isFirst()\n        };\n    }\n}\n\n\n","import { Round } from './group';\nimport { Identifiable } from '../identifiable';\nimport { CompetitionSport } from '../competition/sport';\nimport { PointsCalculation } from '../ranking/pointsCalculation';\nimport { Sport } from '../sport';\n\nexport class AgainstQualifyConfig extends Identifiable {\n    constructor(\n        protected competitionSport: CompetitionSport,\n        protected round: Round,\n        protected pointsCalculation: PointsCalculation,\n        protected winPoints: number,\n        protected drawPoints: number,\n        protected winPointsExt: number,\n        protected drawPointsExt: number,\n        protected losePointsExt: number) {\n        super();\n        round.getAgainstQualifyConfigs().push(this);\n    }\n\n    getCompetitionSport(): CompetitionSport {\n        return this.competitionSport;\n    }\n\n    getSport(): Sport {\n        return this.competitionSport.getSport();\n    }\n\n    getRound(): Round {\n        return this.round;\n    }\n\n    getWinPoints(): number {\n        return this.winPoints;\n    }\n\n    setWinPoints(winPoints: number) {\n        this.winPoints = winPoints;\n    }\n\n    getDrawPoints(): number {\n        return this.drawPoints;\n    }\n\n    setDrawPoints(drawPoints: number) {\n        this.drawPoints = drawPoints;\n    }\n\n    getWinPointsExt(): number {\n        return this.winPointsExt;\n    }\n\n    setWinPointsExt(winPointsExt: number) {\n        this.winPointsExt = winPointsExt;\n    }\n\n    getDrawPointsExt(): number {\n        return this.drawPointsExt;\n    }\n\n    setDrawPointsExt(drawPointsExt: number) {\n        this.drawPointsExt = drawPointsExt;\n    }\n\n    getLosePointsExt(): number {\n        return this.losePointsExt;\n    }\n\n    setLosePointsExt(losePointsExt: number) {\n        this.losePointsExt = losePointsExt;\n    }\n\n    getPointsCalculation(): PointsCalculation {\n        return this.pointsCalculation;\n    }\n}\n\n","import { Injectable } from '@angular/core';\n\nimport { JsonAgainstQualifyConfig } from './json';\nimport { Round } from '../group';\nimport { AgainstQualifyConfig } from '../againstConfig';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class AgainstQualifyConfigMapper {\n    constructor() { }\n\n    toObject(json: JsonAgainstQualifyConfig, round: Round, againstQualifyConfig?: AgainstQualifyConfig): AgainstQualifyConfig {\n        if (againstQualifyConfig === undefined) {\n            const competitionSport = round.getCompetition().getSportById(json.competitionSportId);\n            if (competitionSport === undefined) {\n                throw new Error('competitionSport could not be found');\n            }\n            againstQualifyConfig = new AgainstQualifyConfig(\n                competitionSport,\n                round,\n                json.pointsCalculation,\n                json.winPoints,\n                json.drawPoints,\n                json.winPointsExt,\n                json.drawPointsExt,\n                json.losePointsExt);\n        } else {\n            againstQualifyConfig.setWinPoints(json.winPoints);\n            againstQualifyConfig.setDrawPoints(json.drawPoints);\n            againstQualifyConfig.setWinPointsExt(json.winPointsExt);\n            againstQualifyConfig.setDrawPointsExt(json.drawPointsExt);\n            againstQualifyConfig.setLosePointsExt(json.losePointsExt);\n        }\n        againstQualifyConfig.setId(json.id);\n\n        return againstQualifyConfig;\n    }\n\n    toJson(config: AgainstQualifyConfig): JsonAgainstQualifyConfig {\n        return {\n            id: config.getId(),\n            competitionSportId: config.getCompetitionSport().getId(),\n            winPoints: config.getWinPoints(),\n            drawPoints: config.getDrawPoints(),\n            winPointsExt: config.getWinPointsExt(),\n            drawPointsExt: config.getDrawPointsExt(),\n            losePointsExt: config.getLosePointsExt(),\n            pointsCalculation: config.getPointsCalculation()\n        };\n    }\n}\n","import { Injectable } from '@angular/core';\nimport { AgainstQualifyConfigMapper } from '../qualify/againstConfig/mapper';\nimport { ScoreConfigMapper } from '../score/config/mapper';\nimport { PouleMapper } from '../poule/mapper';\nimport { QualifyGroupMapper } from '../qualify/group/mapper';\nimport { JsonRound } from './json';\nimport { Round } from '../qualify/group';\nimport { HorizontalPouleCreator } from '../poule/horizontal/creator';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class RoundMapper {\n    private horizontalPouleCreator: HorizontalPouleCreator;\n\n    constructor(\n        private pouleMapper: PouleMapper,\n        private scoreConfigMapper: ScoreConfigMapper,\n        private againstQualifyConfigMapper: AgainstQualifyConfigMapper,\n    ) {\n        this.horizontalPouleCreator = new HorizontalPouleCreator(); \n    }\n\n    toObject(json: JsonRound, round: Round): Round {\n        round.setId(json.id);\n        json.poules.map(jsonPoule => this.pouleMapper.toObject(jsonPoule, round, undefined));\n\n        this.horizontalPouleCreator.remove(round);\n        this.horizontalPouleCreator.create(round);\n\n        if (json.qualifyGroups.length > 0) {\n            const nextStructureCell = round.getStructureCell().getNext();\n            if (nextStructureCell === undefined) {\n                throw new Error('structurecell does not exists');\n            }\n            const qualifyGroupMapper = new QualifyGroupMapper(this);\n            json.qualifyGroups.forEach((jsonQualifyGroup) => {\n                qualifyGroupMapper.toObject(jsonQualifyGroup, round, nextStructureCell);\n            });\n        }\n\n        if (json.scoreConfigs) {\n            json.scoreConfigs.forEach(jsonScoreConfig => {\n                this.scoreConfigMapper.toObject(jsonScoreConfig, round);\n            });\n        }\n        if (json.againstQualifyConfigs) {\n            json.againstQualifyConfigs.forEach(jsonAgainstQualifyConfigs => {\n                this.againstQualifyConfigMapper.toObject(jsonAgainstQualifyConfigs, round);\n            });\n        }\n        \n\n        return round;\n    }\n\n    toJson(round: Round): JsonRound {\n        const qualifyGroupMapper = new QualifyGroupMapper(this);\n        return {\n            id: round.getId(),\n            name: round.getName(),\n            poules: round.getPoules().map(poule => this.pouleMapper.toJson(poule)),\n            qualifyGroups: round.getQualifyGroups().map(qualifyGroupIt => qualifyGroupMapper.toJson(qualifyGroupIt)),\n            scoreConfigs: round.getScoreConfigs().map(scoreConfigIt => this.scoreConfigMapper.toJson(scoreConfigIt)),\n            againstQualifyConfigs: round.getAgainstQualifyConfigs().map(qualifyGroupIt => this.againstQualifyConfigMapper.toJson(qualifyGroupIt))\n        };\n    }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Category } from '../category';\nimport { RoundMapper } from '../round/mapper';\nimport { RoundNumber } from '../round/number';\nimport { Round } from '../qualify/group';\nimport { JsonCategory } from './json';\nimport { StructureCell } from '../structure/cell';\nimport { StructureCellMapper } from '../structure/cell/mapper';\nimport { QualifyRuleCreator } from '../qualify/rule/creator';\nimport { HorizontalPouleCreator } from '../poule/horizontal/creator';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class CategoryMapper {\n\n    private qualifyRuleCreator: QualifyRuleCreator;\n    \n\n    constructor(\n        private structureCellMapper: StructureCellMapper,\n        private roundMapper: RoundMapper\n    ) { \n        this.qualifyRuleCreator = new QualifyRuleCreator();\n        \n    }\n\n    toObject(json: JsonCategory, firstRoundNumber: RoundNumber, disableCache?: boolean): Category {\n        const category = new Category(firstRoundNumber.getCompetition(), json.name, json.number);\n        category.setAbbreviation(json.abbreviation);\n\n        this.structureCellMapper.toObject(json.firstStructureCell, category, firstRoundNumber);\n\n        const rootRound = new Round(category.getFirstStructureCell(), undefined)\n        category.setId(json.id);\n        this.roundMapper.toObject(json.rootRound, rootRound);\n\n        this.addQualifyRules(rootRound);        \n\n        return category;\n    }\n\n    addQualifyRules(round: Round) {\n        this.qualifyRuleCreator.remove(round);    \n        this.qualifyRuleCreator.create(round);\n        round.getChildren().forEach((childRound: Round) => {\n            this.addQualifyRules(childRound);\n        });\n    }\n\n    toJson(category: Category): JsonCategory {\n        return {\n            id: category.getId(),\n            name: category.getName(),\n            number: category.getNumber(),\n            abbreviation: category.getAbbreviation(),\n            firstStructureCell: this.structureCellMapper.toJson(category.getFirstStructureCell()),\n            rootRound: this.roundMapper.toJson(category.getRootRound())\n        };\n    }\n}\n","export class EnumReflection {\n    public static getNames<T>(object: T): Array<string> {\n        let result = new Array<string>();\n        for (let name in object) {\n            result.push(name);\n        }\n        return result;\n    }\n\n    public static getValues<T>(object: T): Array<number> {\n        let result = new Array<number>();\n        for (let name in object) {\n            result.push(<any>object[name]);\n        }\n        return result;\n    }\n}","export enum AgainstRuleSet { DiffFirst = 'diffFirst', AmongFirst = 'amongFirst' }","import { Field } from './field';\nimport { League } from './league';\nimport { Referee } from './referee';\nimport { Season } from './season';\nimport { Sport } from './sport';\nimport { Association } from './association';\nimport { TeamCompetitor } from './competitor/team';\nimport { CompetitionSport } from './competition/sport';\nimport { AgainstRuleSet } from './ranking/againstRuleSet';\nimport { Identifiable } from './identifiable';\nimport { Single } from './sport/variant/single';\nimport { AgainstH2h } from './sport/variant/against/h2h';\nimport { AgainstGpp } from './sport/variant/against/gamesPerPlace';\nimport { AllInOneGame } from './sport/variant/allInOneGame';\n\nexport class Competition extends Identifiable {\n    protected startDateTime: Date;\n    protected againstRuleSet: AgainstRuleSet = AgainstRuleSet.DiffFirst;\n    protected referees: Referee[] = [];\n    protected sports: CompetitionSport[] = [];\n    protected teamCompetitors: TeamCompetitor[] = [];\n\n    constructor(protected league: League, protected season: Season) {\n        super();\n        this.startDateTime = season.getStartDateTime();\n    }\n\n    getLeague(): League {\n        return this.league;\n    }\n\n    getAssociation(): Association {\n        return this.getLeague().getAssociation();\n    }\n\n    getSeason(): Season {\n        return this.season;\n    }\n\n    getAgainstRuleSet(): AgainstRuleSet {\n        return this.againstRuleSet;\n    }\n\n    setAgainstRuleSet(againstRuleSet: AgainstRuleSet): void {\n        this.againstRuleSet = againstRuleSet;\n    }\n\n    getStartDateTime(): Date {\n        return this.startDateTime;\n    }\n\n    setStartDateTime(date: Date) {\n        this.startDateTime = date;\n    }\n\n    getName(): string {\n        return this.getLeague().getName() + ' ' + this.getSeason().getName();\n    }\n\n    getFields(): Field[] {\n        let fields: Field[] = [];\n        this.getSports().forEach(sport => fields = fields.concat(sport.getFields()));\n        return fields;\n    }\n\n    getReferees(): Referee[] {\n        return this.referees;\n    }\n\n    getReferee(priority: number): Referee | undefined {\n        return this.referees.find(refereeIt => priority === refereeIt.getPriority());\n    }\n\n    getSports(): CompetitionSport[] {\n        return this.sports;\n    }\n\n    getSportVariants(): (Single | AgainstH2h | AgainstGpp | AllInOneGame)[] {\n        return this.sports.map((competitionSport: CompetitionSport) => competitionSport.getVariant());\n    }\n\n    getSportById(id: string|number): CompetitionSport | undefined {\n        return this.sports.find((competitionSport: CompetitionSport) => competitionSport.getId() === id);\n    }\n\n    hasMultipleSports(): boolean {\n        return this.sports.length > 1;\n    }\n\n    getSingleSport(): CompetitionSport {\n        return this.sports[0];\n    }\n\n    getTeamCompetitors(): TeamCompetitor[] {\n        return this.teamCompetitors;\n    }\n}\n","import { Association } from './association';\nimport { Identifiable } from './identifiable';\n\nexport class League extends Identifiable {\n    static readonly MIN_LENGTH_NAME = 3;\n    static readonly MAX_LENGTH_NAME = 30;\n    static readonly MAX_LENGTH_ABBREVIATION = 7;\n    static readonly MAX_LENGTH_SPORT = 30;\n\n    protected abbreviation: string | undefined;\n\n    constructor(protected association: Association, protected name: string) {\n        super();\n    }\n\n    getName(): string {\n        return this.name;\n    }\n\n    setName(name: string): void {\n        this.name = name;\n    }\n\n    getAbbreviation(): string | undefined {\n        return this.abbreviation;\n    }\n\n    setAbbreviation(abbreviation: string | undefined): void {\n        this.abbreviation = abbreviation;\n    }\n\n    getAssociation(): Association {\n        return this.association;\n    }\n}\n","import { AssociationMapper } from '../association/mapper';\nimport { League } from '../league';\nimport { Injectable } from '@angular/core';\nimport { JsonLeague } from './json';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class LeagueMapper {\n    protected cache: LeagueMap = {};\n\n    constructor(private associationMapper: AssociationMapper) { }\n\n    toObject(json: JsonLeague, disableCache?: boolean): League {\n        let league;\n        if (disableCache !== true) {\n            league = this.cache[json.id];\n        }\n        if (league === undefined) {\n            league = new League(this.associationMapper.toObject(json.association), json.name);\n            league.setId(json.id);\n            this.cache[league.getId()] = league;\n        }\n        this.updateObject(json, league);\n        return league;\n    }\n\n    updateObject(json: JsonLeague, league: League) {\n        league.setName(json.name);\n        league.setAbbreviation(json.abbreviation);\n    }\n\n    toJson(league: League): JsonLeague {\n        return {\n            id: league.getId(),\n            name: league.getName(),\n            abbreviation: league.getAbbreviation(),\n            association: this.associationMapper.toJson(league.getAssociation()),\n        };\n    }\n}\n\ninterface LeagueMap {\n    [key: string]: League;\n}","export class Period {\n    constructor(\n        protected startDateTime: Date,\n        protected endDateTime: Date) {\n    }\n\n    getStartDateTime(): Date {\n        return this.startDateTime;\n    }\n\n    getEndDateTime(): Date {\n        return this.endDateTime;\n    }\n\n    isIn(dateOrPeriod?: Date | Period): boolean {\n        if (dateOrPeriod === undefined) {\n            dateOrPeriod = new Date();\n        }\n        if (dateOrPeriod instanceof Date) {\n            return dateOrPeriod.getTime() >= this.startDateTime.getTime() && dateOrPeriod.getTime() <= this.endDateTime.getTime();\n        }\n        return dateOrPeriod.getStartDateTime().getTime() >= this.startDateTime.getTime()\n            && dateOrPeriod.getEndDateTime().getTime() <= this.endDateTime.getTime();\n    }\n\n    overlaps(period: Period): boolean {\n        return (period.getEndDateTime() > this.getStartDateTime() && period.getStartDateTime() < this.getEndDateTime());\n    }\n}\n","import { Period } from \"./period\";\n\nexport class Season extends Period {\n    static readonly MIN_LENGTH_NAME = 2;\n    static readonly MAX_LENGTH_NAME = 9;\n\n    protected id: string | number = 0;\n\n    constructor(protected name: string, startDateTime: Date, endDateTime: Date) {\n        super(startDateTime, endDateTime);\n        this.setName(name);\n    }\n\n    getId(): string | number {\n        return this.id;\n    }\n\n    setId(id: string | number): void {\n        this.id = id;\n    }\n\n    getName(): string {\n        return this.name;\n    }\n\n    setName(name: string): void {\n        this.name = name;\n    }\n\n    setStartDateTime(startDateTime: Date): void {\n        this.startDateTime = startDateTime;\n    }\n\n    setEndDateTime(endDateTime: Date): void {\n        this.endDateTime = endDateTime;\n    }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Season } from '../season';\nimport { JsonSeason } from './json';\n@Injectable({\n    providedIn: 'root'\n})\nexport class SeasonMapper {\n    protected cache: SeasonMap = {};\n\n    constructor() { }\n\n    toObject(json: JsonSeason, disableCache?: boolean): Season {\n        let season;\n        if (disableCache !== true) {\n            season = this.cache[json.id];\n        }\n        if (season === undefined) {\n            season = new Season(json.name, new Date(json.start), new Date(json.end));\n            season.setId(json.id);\n            this.cache[season.getId()] = season;\n        }\n        this.updateObject(json, season);\n        return season;\n    }\n\n    updateObject(json: JsonSeason, season: Season) {\n        season.setStartDateTime(new Date(json.start));\n        season.setEndDateTime(new Date(json.end));\n    }\n\n    toJson(season: Season): JsonSeason {\n        return {\n            id: season.getId(),\n            name: season.getName(),\n            start: season.getStartDateTime().toISOString(),\n            end: season.getEndDateTime().toISOString()\n        };\n    }\n}\n\ninterface SeasonMap {\n    [key: string]: Season;\n}\n","import { Competition } from './competition';\n\nexport class Referee {\n    static readonly MIN_LENGTH_INITIALS = 1;\n    static readonly MAX_LENGTH_INITIALS = 3;\n    static readonly MIN_LENGTH_NAME = 1;\n    static readonly MAX_LENGTH_NAME = 30;\n    static readonly MAX_LENGTH_INFO = 200;\n\n    protected id: number = 0;\n    protected priority: number;\n    protected name: string | undefined;\n    protected emailaddress: string | undefined;\n    protected info: string | undefined;\n\n    constructor(protected competition: Competition, protected initials: string, priority?: number) {\n        this.competition.getReferees().push(this);\n        this.priority = priority ? priority : competition.getReferees().length;\n    }\n\n    getId(): number {\n        return this.id;\n    }\n\n    setId(id: number): void {\n        this.id = id;\n    }\n\n    getCompetition(): Competition {\n        return this.competition;\n    }\n\n    getPriority(): number {\n        return this.priority;\n    }\n\n    setPriority(priority: number): void {\n        this.priority = priority;\n    }\n\n    getInitials(): string {\n        return this.initials;\n    }\n\n    setInitials(initials: string): void {\n        this.initials = initials;\n    }\n\n    getName(): string | undefined {\n        return this.name;\n    }\n\n    setName(name: string | undefined): void {\n        this.name = name;\n    }\n\n    getInfo(): string | undefined {\n        return this.info;\n    }\n\n    setInfo(info: string | undefined): void {\n        this.info = info;\n    }\n\n    getEmailaddress(): string | undefined {\n        return this.emailaddress;\n    }\n\n    setEmailaddress(emailaddress: string | undefined): void {\n        this.emailaddress = emailaddress;\n    }\n}\n","import { Referee } from '../referee';\nimport { Competition } from '../competition';\nimport { Injectable } from '@angular/core';\nimport { JsonReferee } from './json';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class RefereeMapper {\n\n    toObject(json: JsonReferee, competition: Competition): Referee {\n        const existingField: Referee | undefined = this.getFromCompetition(json.id, competition);\n        const referee: Referee = existingField ? existingField : new Referee(competition, json.initials, json.priority);\n        referee.setId(json.id);\n        referee.setName(json.name);\n        referee.setInfo(json.info);\n        referee.setEmailaddress(json.emailaddress);\n        return referee;\n    }\n\n    getFromCompetition(id: string | number, competition: Competition): Referee | undefined {\n        return competition.getReferees().find((refereeIt: Referee) => refereeIt.getId() === id);\n    }\n\n    updateObject(json: JsonReferee, referee: Referee): Referee {\n        referee.setName(json.name);\n        referee.setInfo(json.info);\n        referee.setEmailaddress(json.emailaddress);\n        return referee;\n    }\n\n    toJson(referee: Referee): JsonReferee {\n        return {\n            id: referee.getId(),\n            priority: referee.getPriority(),\n            initials: referee.getInitials(),\n            name: referee.getName(),\n            emailaddress: referee.getEmailaddress(),\n            info: referee.getInfo()\n        };\n    }\n}\n\nexport interface RefereeMap {\n    [key: number]: Referee;\n}\n","import { Competition } from '../competition';\nimport { Sport } from '../sport';\nimport { Field } from '../field';\nimport { Identifiable } from '../identifiable';\nimport { Single } from '../sport/variant/single';\nimport { AllInOneGame } from '../sport/variant/allInOneGame';\nimport { AgainstH2h } from '../sport/variant/against/h2h';\nimport { AgainstGpp } from '../sport/variant/against/gamesPerPlace';\nimport { PointsCalculation } from '../ranking/pointsCalculation';\n\nexport class CompetitionSport extends Identifiable {\n    protected fields: Field[] = [];\n    protected hasNextDefaultScoreConfigX: boolean = true;\n\n    constructor(\n        protected sport: Sport, \n        protected competition: Competition,\n        protected defaultPointsCalculation: PointsCalculation,\n        protected defaultWinPoints: number,\n        protected defaultDrawPoints: number,\n        protected defaultWinPointsExt: number,\n        protected defaultDrawPointsExt: number,\n        protected defaultLosePointsExt: number,\n        protected variant: Single | AgainstH2h | AgainstGpp | AllInOneGame) {\n        super();\n        this.competition.getSports().push(this);\n    }\n\n    getSport(): Sport {\n        return this.sport;\n    }\n\n    getCompetition(): Competition {\n        return this.competition;\n    }\n\n    getDefaultPointsCalculation(): PointsCalculation {\n        return this.defaultPointsCalculation;\n    }\n\n    getDefaultWinPoints(): number {\n        return this.defaultWinPoints;\n    }\n\n    getDefaultDrawPoints(): number {\n        return this.defaultDrawPoints;\n    }\n\n    getDefaultWinPointsExt(): number {\n        return this.defaultWinPointsExt;\n    }\n\n    getDefaultDrawPointsExt(): number {\n        return this.defaultDrawPointsExt;\n    }\n\n    getDefaultLosePointsExt(): number {\n        return this.defaultLosePointsExt;\n    }\n\n\n    hasNextDefaultScoreConfig(): boolean {\n        return this.hasNextDefaultScoreConfigX;\n    }\n\n    getFields(): Field[] {\n        return this.fields;\n    }\n\n    getField(priority: number): Field | undefined {\n        return this.fields.find(fieldIt => priority === fieldIt.getPriority());\n    }\n\n    getVariant(): Single | AgainstH2h | AgainstGpp | AllInOneGame {\n        return this.variant;\n    }\n}\n","import { GameMode } from \"../../planning/gameMode\";\nimport { Sport } from \"../../sport\";\nimport { SportVariant } from \"../variant\";\n\nexport class AgainstVariant extends SportVariant {\n    constructor(sport: Sport, protected nrOfHomePlaces: number, protected nrOfAwayPlaces: number) {\n        super(sport, GameMode.Against);\n    }\n\n    getNrOfHomePlaces(): number {\n        return this.nrOfHomePlaces;\n    }\n\n    getNrOfAwayPlaces(): number {\n        return this.nrOfAwayPlaces;\n    }\n\n    getNrOfGamePlaces(): number {\n        return this.nrOfHomePlaces + this.nrOfAwayPlaces;\n    }\n\n    hasMultipleSidePlaces(): boolean {\n        return this.getNrOfGamePlaces() > 2;\n    }\n\n    isBalanced(): boolean {\n        return this.nrOfHomePlaces === this.nrOfAwayPlaces;\n    }\n}\n","\nimport { AgainstSide } from \"../../../against/side\";\nimport { Sport } from \"../../../sport\";\nimport { AgainstVariant } from \"../against\";\n\nexport class AgainstGpp extends AgainstVariant {\n    constructor(sport: Sport, nrOfHomePlaces: number, nrOfAwayPlaces: number, protected nrOfGamesPerPlace: number) {\n        super(sport, nrOfHomePlaces, nrOfAwayPlaces);\n    }\n\n    public getNrOfGamesPerPlace(): number {\n        return this.nrOfGamesPerPlace;\n    }\n\n    public getGamePlacesId(): string {\n        return this.getNrOfHomePlaces() + '-' + this.getNrOfAwayPlaces();\n    }\n\n    public getNrOfAgainstCombinationsPerGame(side?: AgainstSide|undefined): number {\n        if( side === AgainstSide.Home) {\n            return this.getNrOfAwayPlaces();\n        } else if( side === AgainstSide.Away) {\n            return this.getNrOfHomePlaces();\n        }\n        return this.getNrOfHomePlaces() * this.getNrOfAwayPlaces();\n\n    }\n}\n","\nimport { Sport } from \"../../../sport\";\nimport { AgainstVariant } from \"../against\";\n\nexport class AgainstH2h extends AgainstVariant {\n    constructor(sport: Sport, nrOfHomePlaces: number, nrOfAwayPlaces: number, protected nrOfH2H: number) {\n        super(sport, nrOfHomePlaces, nrOfAwayPlaces);\n    }\n\n    getNrOfH2H(): number {\n        return this.nrOfH2H;\n    }\n}\n","import { GameMode } from \"../../planning/gameMode\";\nimport { Sport } from \"../../sport\";\nimport { SportVariant } from \"../variant\";\n\nexport class Single extends SportVariant {\n    constructor(sport: Sport, protected nrOfGamePlaces: number, protected nrOfGamesPerPlace: number) {\n        super(sport, GameMode.Single);\n    }\n\n    getNrOfGamePlaces(): number {\n        return this.nrOfGamePlaces;\n    }\n\n    getNrOfGamesPerPlace(): number {\n        return this.nrOfGamesPerPlace;\n    }\n}","import { Identifiable } from \"./identifiable\";\nimport { GameMode } from \"./planning/gameMode\";\n\nexport class Sport extends Identifiable {\n    static readonly MIN_LENGTH_NAME = 3;\n    static readonly MAX_LENGTH_NAME = 30;\n    protected customId: number = 0;\n\n    constructor(\n        protected name: string,\n        protected team: boolean,\n        protected defaultGameMode: GameMode,\n        protected defaultNrOfSidePlaces: number\n    ) {\n        super();\n    }\n\n    getName(): string {\n        return this.name;\n    }\n\n    setName(name: string): void {\n        this.name = name;\n    }\n\n    getTeam(): boolean {\n        return this.team;\n    }\n\n    getDefaultGameMode(): GameMode {\n        return this.defaultGameMode;\n    }\n\n    getDefaultNrOfSidePlaces(): number {\n        return this.defaultNrOfSidePlaces;\n    }\n\n    getCustomId(): number {\n        return this.customId;\n    }\n\n    setCustomId(id: number): void {\n        this.customId = id;\n    }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Sport } from '../sport';\nimport { JsonSport } from './json';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class SportMapper {\n    protected cache: SportMap = {};\n\n    constructor() { }\n\n    toObject(json: JsonSport, disableCache?: boolean): Sport {\n        let sport;\n        if (disableCache !== true) {\n            sport = this.cache[json.id];\n        }\n        if (sport === undefined) {\n            sport = new Sport(json.name, json.team, json.defaultGameMode, json.defaultNrOfSidePlaces);\n            sport.setId(json.id);\n            this.cache[json.id] = sport;\n        }\n        this.updateObject(json, sport);\n        return sport;\n    }\n\n    updateObject(json: JsonSport, sport: Sport) {\n        // sport.setTeam(json.team);\n        if (json.customId) {\n            sport.setCustomId(json.customId);\n        }\n    }\n\n    toJson(sport: Sport): JsonSport {\n        return {\n            id: sport.getId(),\n            name: sport.getName(),\n            team: sport.getTeam(),\n            defaultGameMode: sport.getDefaultGameMode(),\n            defaultNrOfSidePlaces: sport.getDefaultNrOfSidePlaces(),\n            customId: sport.getCustomId()\n        };\n    }\n}\n\ninterface SportMap {\n    [key: string]: Sport;\n}","import { CompetitionSport } from './competition/sport';\nimport { Identifiable } from './identifiable';\n\nexport class Field extends Identifiable {\n    static readonly MIN_LENGTH_NAME = 1;\n    static readonly MAX_LENGTH_NAME = 3;\n\n    protected name: string | undefined;\n\n    constructor(protected competitionSport: CompetitionSport, protected priority: number) {\n        super();\n        this.competitionSport.getFields().push(this);\n    }\n\n    getCompetitionSport(): CompetitionSport {\n        return this.competitionSport;\n    }\n\n    getPriority(): number {\n        return this.priority;\n    }\n\n    setPriority(priority: number): void {\n        this.priority = priority;\n    }\n\n    getName(): string | undefined {\n        return this.name;\n    }\n\n    setName(name: string | undefined): void {\n        this.name = name;\n    }\n}\n","import { Injectable } from '@angular/core';\nimport { CompetitionSport } from '../competition/sport';\n\nimport { Field } from '../field';\nimport { JsonField } from './json';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class FieldMapper {\n    toObject(json: JsonField, competitionSport: CompetitionSport): Field {\n        const existingField: Field | undefined = this.getFromCompetitionSport(json.id, competitionSport);\n        const field: Field = existingField ? existingField : new Field(competitionSport, json.priority);\n        field.setId(json.id);\n        return this.updateObject(json, field);\n    }\n\n    getFromCompetitionSport(id: string | number, competitionSport: CompetitionSport): Field | undefined {\n        return competitionSport.getFields().find((fieldIt: Field) => fieldIt.getId() === id);\n    }\n\n    updateObject(json: JsonField, field: Field): Field {\n        field.setName(json.name);\n        return field;\n    }\n\n    toJson(field: Field): JsonField {\n        return {\n            id: field.getId(),\n            priority: field.getPriority(),\n            name: field.getName()\n        };\n    }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Competition } from '../../competition';\nimport { SportMapper } from '../../sport/mapper';\nimport { FieldMapper } from '../../field/mapper';\nimport { JsonCompetitionSport } from './json';\nimport { CompetitionSport } from '../sport';\nimport { Field } from '../../field';\nimport { GameMode } from '../../planning/gameMode';\nimport { Sport } from '../../sport';\nimport { JsonPersistSportVariant } from '../../sport/variant/json';\nimport { AllInOneGame } from '../../sport/variant/allInOneGame';\nimport { AgainstGpp } from '../../sport/variant/against/gamesPerPlace';\nimport { AgainstH2h } from '../../sport/variant/against/h2h';\nimport { Single } from '../../sport/variant/single';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class CompetitionSportMapper {\n    protected cache: CompetitionSportMap = {};\n\n    constructor(private sportMapper: SportMapper, private fieldMapper: FieldMapper) {\n    }\n\n    toObject(json: JsonCompetitionSport, competition: Competition, disableCache?: boolean): CompetitionSport {\n        if (disableCache !== true && this.cache[json.id]) {\n            return this.cache[json.id];\n        }\n        const sport = this.sportMapper.toObject(json.sport);\n        const competitionSport = new CompetitionSport(\n            sport, \n            competition, \n            json.defaultPointsCalculation, \n            json.defaultWinPoints,\n            json.defaultDrawPoints,\n            json.defaultWinPointsExt,\n            json.defaultDrawPointsExt,\n            json.defaultLosePointsExt,\n            this.toVariant(json, sport));\n        json.fields.map(jsonField => this.fieldMapper.toObject(jsonField, competitionSport));\n        competitionSport.setId(json.id);\n        this.cache[competitionSport.getId()] = competitionSport;\n        return competitionSport;\n    }\n\n    toVariant(json: JsonCompetitionSport, sport: Sport): Single | AgainstH2h | AgainstGpp | AllInOneGame {\n        if (json.gameMode === GameMode.Single) {\n            return new Single(sport, json.nrOfGamePlaces, json.nrOfGamesPerPlace);\n        } else if (json.gameMode === GameMode.Against) {\n            if (json.nrOfH2H > 0) {\n                return new AgainstH2h(sport, json.nrOfHomePlaces, json.nrOfAwayPlaces, json.nrOfH2H);\n            }\n            return new AgainstGpp(sport, json.nrOfHomePlaces, json.nrOfAwayPlaces, json.nrOfGamesPerPlace);\n        }\n        return new AllInOneGame(sport, json.nrOfGamesPerPlace);\n    }\n\n    toJson(competitionSport: CompetitionSport): JsonCompetitionSport {\n        let jsonVariant = this.variantToJson(competitionSport.getVariant());\n        let json: JsonCompetitionSport = {\n            id: competitionSport.getId(),\n            sport: this.sportMapper.toJson(competitionSport.getSport()),\n            defaultPointsCalculation: competitionSport.getDefaultPointsCalculation(),\n            defaultWinPoints: competitionSport.getDefaultWinPoints(),\n            defaultDrawPoints: competitionSport.getDefaultDrawPoints(),\n            defaultWinPointsExt: competitionSport.getDefaultWinPointsExt(),\n            defaultDrawPointsExt: competitionSport.getDefaultDrawPointsExt(),\n            defaultLosePointsExt: competitionSport.getDefaultLosePointsExt(),\n            fields: competitionSport.getFields().map((field: Field) => this.fieldMapper.toJson(field)),\n            gameMode: jsonVariant.gameMode,\n            nrOfHomePlaces: jsonVariant.nrOfHomePlaces,\n            nrOfAwayPlaces: jsonVariant.nrOfAwayPlaces,\n            nrOfGamePlaces: jsonVariant.nrOfGamePlaces,\n            nrOfH2H: jsonVariant.nrOfH2H,\n            nrOfGamesPerPlace: jsonVariant.nrOfGamesPerPlace\n        }\n        return json;\n    }\n\n    variantToJson(variant: Single | AgainstH2h | AgainstGpp | AllInOneGame): JsonPersistSportVariant {\n\n        let json: JsonPersistSportVariant = {\n            gameMode: variant.getGameMode(), nrOfHomePlaces: 0, nrOfAwayPlaces: 0, nrOfGamePlaces: 0, nrOfH2H: 0, nrOfGamesPerPlace: 0\n        }\n        if (variant instanceof Single) {\n            json.nrOfGamePlaces = variant.getNrOfGamePlaces();\n            json.nrOfGamesPerPlace = variant.getNrOfGamesPerPlace();\n        } else if (variant instanceof AgainstH2h) {\n            json.nrOfHomePlaces = variant.getNrOfHomePlaces();\n            json.nrOfAwayPlaces = variant.getNrOfAwayPlaces();\n            json.nrOfH2H = variant.getNrOfH2H();\n        } else if (variant instanceof AgainstGpp) {\n            json.nrOfHomePlaces = variant.getNrOfHomePlaces();\n            json.nrOfAwayPlaces = variant.getNrOfAwayPlaces();\n            json.nrOfGamesPerPlace = variant.getNrOfGamesPerPlace();\n        } else {\n            json.nrOfGamesPerPlace = variant.getNrOfGamesPerPlace();\n        }\n        return json;\n    }\n\n    getMap(competition: Competition): CompetitionSportMap {\n        const competitionSportMap: CompetitionSportMap = {};\n        competition.getSports().forEach((competitionSport: CompetitionSport) => {\n            competitionSportMap[competitionSport.getId()] = competitionSport;\n        });\n        return competitionSportMap;\n    }\n}\n\nexport interface CompetitionSportMap {\n    [key: string]: CompetitionSport;\n}\n","import { Competition } from './competition';\nimport { StartLocation } from './competitor/startLocation';\nimport { Identifiable } from './identifiable';\n\nexport class CompetitorBase extends Identifiable {\n    protected present: boolean = false;\n    protected publicInfo: string | undefined;\n    protected privateInfo: string | undefined;\n\n    constructor(protected competition: Competition, protected startLocation: StartLocation) {\n        super();\n    }\n\n    getPresent(): boolean {\n        return this.present;\n    }\n\n    setPresent(present: boolean): void {\n        this.present = present;\n    }\n\n    getPublicInfo(): string | undefined {\n        return this.publicInfo;\n    }\n\n    setPublicInfo(info: string): void {\n        this.publicInfo = info;\n    }\n\n    getPrivateInfo(): string | undefined {\n        return this.privateInfo;\n    }\n\n    setPrivateInfo(info: string): void {\n        this.privateInfo = info;\n    }\n\n    getCompetition(): Competition {\n        return this.competition;\n    }\n\n    getStartLocation(): StartLocation {\n        return this.startLocation;\n    }\n}\n\n\nexport interface Competitor {\n    getId(): string | number;\n    getName(): string;\n    getPresent(): boolean;\n    getPublicInfo(): string | undefined;\n    getPrivateInfo(): string | undefined;\n    getCompetition(): Competition;\n    getStartLocation(): StartLocation;\n}\n","import { CompetitorBase, Competitor } from '../competitor';\nimport { Competition } from '../competition';\nimport { Team } from '../team';\nimport { StartLocation } from './startLocation';\n\nexport class TeamCompetitor extends CompetitorBase implements Competitor {\n    constructor(competition: Competition, startLocation: StartLocation, private team: Team) {\n        super(competition, startLocation);\n        this.competition.getTeamCompetitors().push(this);\n    }\n\n    getName(): string {\n        return this.team.getName();\n    }\n\n    getTeam(): Team {\n        return this.team;\n    }\n}\n","import { Association } from './association';\nimport { Identifiable } from './identifiable';\n\nexport class Team extends Identifiable {\n    static readonly MIN_LENGTH_NAME = 2;\n    static readonly MAX_LENGTH_NAME = 30;\n    static readonly MAX_LENGTH_ABBREVIATION = 7;\n    static readonly MAX_LENGTH_INFO = 200;\n\n    protected abbreviation: string | undefined;\n\n    constructor(protected association: Association, protected name: string) {\n        super();\n        this.association.getTeams().push(this);\n    }\n\n    getName(): string {\n        return this.name;\n    }\n\n    setName(name: string): void {\n        this.name = name;\n    }\n\n    getAbbreviation(): string | undefined {\n        return this.abbreviation;\n    }\n\n    setAbbreviation(abbreviation: string | undefined): void {\n        this.abbreviation = abbreviation;\n    }\n\n    getAssociation(): Association {\n        return this.association;\n    }\n}\n\n","import { Injectable } from '@angular/core';\nimport { JsonTeam } from './json';\nimport { Association } from '../association';\nimport { Team } from '../team';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class TeamMapper {\n    protected cache: TeamMap = new TeamMap();\n\n    constructor() { }\n\n    toObject(json: JsonTeam, association: Association, disableCache?: boolean): Team {\n        let team;\n        if (disableCache !== true) {\n            team = this.cache.get(+json.id);\n        }\n        if (team === undefined) {\n            team = new Team(association, json.name);\n            team.setId(json.id);\n            this.cache.set(+team.getId(), team);\n        }\n        this.updateObject(json, team);\n        return team;\n    }\n\n    updateObject(json: JsonTeam, team: Team) {\n        team.setName(json.name);\n        team.setAbbreviation(json.abbreviation);\n    }\n\n    toJson(team: Team): JsonTeam {\n        return {\n            id: team.getId(),\n            name: team.getName(),\n            abbreviation: team.getAbbreviation()\n        };\n    }\n}\n\nexport class TeamMap extends Map<number, Team> {\n\n}","import { Injectable } from '@angular/core';\n\nimport { Competition } from '../../competition';\nimport { TeamCompetitor } from '../team';\nimport { JsonCompetitor } from '../json';\nimport { TeamMapper } from '../../team/mapper';\nimport { JsonTeamCompetitor } from './json';\nimport { StartLocation } from '../startLocation';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class TeamCompetitorMapper {\n    constructor(private teamMapper: TeamMapper) { }\n\n    toObject(json: JsonTeamCompetitor, competition: Competition): TeamCompetitor {\n        const startLocation = new StartLocation(json.categoryNr, json.pouleNr, json.placeNr);\n        const competitor = new TeamCompetitor(competition, startLocation,\n            this.teamMapper.toObject(json.team, competition.getAssociation())\n        );\n        competitor.setId(json.id);\n        this.updateObject(json, competitor);\n        return competitor;\n    }\n\n    updateObject(json: JsonCompetitor, teamCompetitor: TeamCompetitor) {\n        json.present ? teamCompetitor.setPresent(json.present) : undefined;\n        json.publicInfo ? teamCompetitor.setPublicInfo(json.publicInfo) : undefined;\n        json.privateInfo ? teamCompetitor.setPrivateInfo(json.privateInfo) : undefined;\n    }\n\n    toJson(teamCompetitor: TeamCompetitor): JsonTeamCompetitor {\n        return {\n            id: teamCompetitor.getId(),\n            name: teamCompetitor.getName(),\n            present: teamCompetitor.getPresent(),\n            publicInfo: teamCompetitor.getPublicInfo(),\n            privateInfo: teamCompetitor.getPrivateInfo(),\n            categoryNr: teamCompetitor.getStartLocation().getCategoryNr(),\n            pouleNr: teamCompetitor.getStartLocation().getPouleNr(),\n            placeNr: teamCompetitor.getStartLocation().getPlaceNr(),\n            team: this.teamMapper.toJson(teamCompetitor.getTeam())\n        };\n    }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Competition } from '../competition';\n\nimport { LeagueMapper } from '../league/mapper';\nimport { SeasonMapper } from '../season/mapper';\nimport { RefereeMapper } from '../referee/mapper';\nimport { CompetitionSportMapper } from './sport/mapper';\nimport { JsonCompetition } from './json';\nimport { TeamCompetitorMapper } from '../competitor/team/mapper';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class CompetitionMapper {\n\n    constructor(\n        private leagueMapper: LeagueMapper,\n        private seasonMapper: SeasonMapper,\n        private refereeMapper: RefereeMapper,\n        private competitionSportMapper: CompetitionSportMapper,\n        private teamCompetitorMapper: TeamCompetitorMapper\n    ) { }\n\n    toObject(json: JsonCompetition, disableCache?: boolean): Competition {\n        const league = this.leagueMapper.toObject(json.league, disableCache);\n        const season = this.seasonMapper.toObject(json.season, disableCache);\n        const competition = new Competition(league, season);\n        competition.setStartDateTime(new Date(json.startDateTime));\n\n        competition.setId(json.id);\n        this.updateObject(json, competition);\n\n        json.referees.map(jsonReferee => this.refereeMapper.toObject(jsonReferee, competition));\n        json.sports.forEach(jsonSport => this.competitionSportMapper.toObject(jsonSport, competition, true));\n        if (json.teamCompetitors) {\n            json.teamCompetitors.forEach(jsonteamCompetitor => this.teamCompetitorMapper.toObject(jsonteamCompetitor, competition));\n        };\n        return competition;\n    }\n\n    updateObject(json: JsonCompetition, competition: Competition) {\n        competition.setAgainstRuleSet(json.againstRuleSet);\n    }\n\n    toJson(competition: Competition): JsonCompetition {\n        return {\n            id: competition.getId(),\n            league: this.leagueMapper.toJson(competition.getLeague()),\n            season: this.seasonMapper.toJson(competition.getSeason()),\n            againstRuleSet: competition.getAgainstRuleSet(),\n            sports: competition.getSports().map(sport => this.competitionSportMapper.toJson(sport)),\n            referees: competition.getReferees().map(referee => this.refereeMapper.toJson(referee)),\n            startDateTime: competition.getStartDateTime().toISOString()\n        };\n    }\n}\n","import { Identifiable } from '../identifiable';\nimport { CompetitionSport } from '../competition/sport';\nimport { RoundNumber } from '../round/number';\nimport { Single } from '../sport/variant/single';\nimport { AgainstH2h } from '../sport/variant/against/h2h';\nimport { AgainstGpp } from '../sport/variant/against/gamesPerPlace';\nimport { AllInOneGame } from '../sport/variant/allInOneGame';\n\nexport class GameAmountConfig extends Identifiable {\n    constructor(\n        protected competitionSport: CompetitionSport,\n        protected roundNumber: RoundNumber,\n        protected amount: number) {\n        super();\n        roundNumber.getGameAmountConfigs().push(this);\n    }\n\n    getAmount(): number {\n        return this.amount;\n    }\n\n    setAmount(amount: number) {\n        this.amount = amount;\n    }\n\n    getCompetitionSport(): CompetitionSport {\n        return this.competitionSport;\n    }\n\n    public createVariant(): Single|AgainstH2h|AgainstGpp|AllInOneGame\n    {\n        const sportVariant = this.competitionSport.getVariant();\n        if (sportVariant instanceof Single) {\n            return new Single(this.competitionSport.getSport(), sportVariant.getNrOfGamePlaces(), this.amount);\n        } else if (sportVariant instanceof AllInOneGame) {\n            return new AllInOneGame(this.competitionSport.getSport(), this.amount);\n        } else if (sportVariant instanceof AgainstH2h) {\n            return new AgainstH2h(this.competitionSport.getSport(),sportVariant.getNrOfHomePlaces(), sportVariant.getNrOfAwayPlaces(), this.amount);\n        } \n        return new AgainstGpp(this.competitionSport.getSport(),sportVariant.getNrOfHomePlaces(), sportVariant.getNrOfAwayPlaces(), this.amount);\n    }\n\n    getRoundNumber(): RoundNumber {\n        return this.roundNumber;\n    }\n}\n","import { AgainstResult } from \"../against/result\";\nimport { AgainstSide } from \"../against/side\";\n\nexport class AgainstScoreHelper {\n\n    constructor(protected home: number, protected away: number) {\n    }\n\n    public getHome(): number {\n        return this.home;\n    }\n\n    public getAway(): number {\n        return this.away;\n    }\n\n    public get(side: AgainstSide): number {\n        return side === AgainstSide.Home ? this.getHome() : this.getAway();\n    }\n\n    public getResult(side: AgainstSide): AgainstResult {\n        if (this.getHome() === this.getAway()) {\n            return AgainstResult.Draw;\n        }\n        if (side === AgainstSide.Home) {\n            return (this.getHome() > this.getAway()) ? AgainstResult.Win : AgainstResult.Loss;\n        }\n        return (this.getAway() > this.getHome()) ? AgainstResult.Win : AgainstResult.Loss;\n    }\n}\n","import { Injectable } from '@angular/core';\nimport { CompetitionSport } from '../../competition/sport';\nimport { AgainstGame } from '../../game/against';\nimport { TogetherGamePlace } from '../../game/place/together';\nimport { Round } from '../../qualify/group';\nimport { AgainstScore } from '../against';\nimport { AgainstScoreHelper } from '../againstHelper';\nimport { ScoreConfig } from '../config';\nimport { ScoreDirection } from '../direction';\nimport { TogetherScore } from '../together';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class ScoreConfigService {\n\n    constructor() {\n    }\n\n    removeFromRound(competitionSport: CompetitionSport, round: Round) {\n        const scoreConfig = round.getScoreConfig(competitionSport);\n        if (scoreConfig) {\n            round.getScoreConfigs().splice(round.getScoreConfigs().indexOf(scoreConfig), 1);\n        }\n        round.getChildren().forEach((child: Round) => this.removeFromRound(competitionSport, child));\n    }\n\n\n\n    copy(competitionSport: CompetitionSport, round: Round, sourceScoreConfig: ScoreConfig) {\n        const newScoreConfig = new ScoreConfig(competitionSport, round, undefined);\n        newScoreConfig.setDirection(sourceScoreConfig.getDirection());\n        newScoreConfig.setMaximum(sourceScoreConfig.getMaximum());\n        newScoreConfig.setEnabled(sourceScoreConfig.getEnabled());\n        const previousSubScoreConfig = sourceScoreConfig.getNext();\n        if (previousSubScoreConfig) {\n            const newSubScoreConfig = new ScoreConfig(competitionSport, round, newScoreConfig);\n            newSubScoreConfig.setDirection(previousSubScoreConfig.getDirection());\n            newSubScoreConfig.setMaximum(previousSubScoreConfig.getMaximum());\n            newSubScoreConfig.setEnabled(previousSubScoreConfig.getEnabled());\n        }\n    }\n\n    createDefault(competitionSport: CompetitionSport, round: Round): ScoreConfig {\n        const scoreConfig = new ScoreConfig(competitionSport, round, undefined);\n        if (competitionSport.hasNextDefaultScoreConfig()) {\n            const subScoreConfig = new ScoreConfig(competitionSport, round, scoreConfig);\n            subScoreConfig.setDirection(ScoreDirection.Upwards);\n            subScoreConfig.setMaximum(0);\n            subScoreConfig.setEnabled(false);\n        }\n        return scoreConfig;\n    }\n\n    isDefault(scoreConfig: ScoreConfig): boolean {\n        if (scoreConfig.getDirection() !== ScoreDirection.Upwards\n            || scoreConfig.getMaximum() !== 0\n        ) {\n            return false;\n        }\n        const nextScoreConfig = scoreConfig.getNext();\n        if (nextScoreConfig === undefined) {\n            return true;\n        }\n        return this.isDefault(nextScoreConfig);\n    }\n\n    areEqual(scoreConfigA: ScoreConfig, scoreConfigB: ScoreConfig): boolean {\n        if (scoreConfigA.getDirection() !== scoreConfigB.getDirection()\n            || scoreConfigA.getMaximum() !== scoreConfigB.getMaximum()\n        ) {\n            return false;\n        }\n        const nextScoreConfigA = scoreConfigA.getNext();\n        const nextScoreConfigB = scoreConfigB.getNext();\n        if (nextScoreConfigA !== undefined && nextScoreConfigB !== undefined) {\n            return this.areEqual(nextScoreConfigA, nextScoreConfigB);\n        }\n        return scoreConfigA.getNext() === scoreConfigB.getNext();\n    }\n\n    getFinalAgainstScore(game: AgainstGame, useSubScore?: boolean): AgainstScoreHelper | undefined {\n        if (game.getScores().length === 0) {\n            return undefined;\n        }\n        if (useSubScore === undefined) {\n            useSubScore = game.getScoreConfig()?.useSubScore();\n        }\n        if (useSubScore === false) {\n            return new AgainstScoreHelper(game.getScores()[0].getHome(), game.getScores()[0].getAway());\n        }\n        let home = 0;\n        let away = 0;\n        game.getScores().forEach(score => {\n            if (score.getHome() > score.getAway()) {\n                home++;\n            } else if (score.getHome() < score.getAway()) {\n                away++;\n            } else {\n                home += 0.5;\n                away += 0.5;\n            }\n        });\n        return new AgainstScoreHelper(home, away);        \n    }\n\n    getFinalAgainstSubScore(game: AgainstGame): AgainstScoreHelper {\n        let home = 0;\n        let away = 0;\n        game.getScores().forEach((score: AgainstScore) => {\n            home += score.getHome();\n            away += score.getAway();\n        });\n        return new AgainstScoreHelper(home, away);\n    }\n\n    getFinalTogetherScore(gamePlace: TogetherGamePlace, useSubScore?: boolean): number {\n        let score = 0;\n        if (gamePlace.getScores().length === 0) {\n            return score;\n        }\n        if (useSubScore === undefined) {\n            useSubScore = gamePlace.getGame().getScoreConfig()?.useSubScore();\n        }\n        if (useSubScore) {\n            gamePlace.getScores().forEach((scoreIt: TogetherScore) => {\n                score += scoreIt.getScore();\n            });\n            return score;\n        }\n        return gamePlace.getScores()[0].getScore();\n    }\n\n    getFinalTogetherSubScore(gamePlace: TogetherGamePlace): number {\n        let score = 0;\n        gamePlace.getScores().forEach(scoreIt => {\n            score += scoreIt.getScore();\n        });\n        return score;\n    }\n}\n","import { Injectable } from '@angular/core';\n\nimport { RoundNumber } from '../../round/number';\nimport { CompetitionSport } from '../../competition/sport';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class GameAmountConfigService {\n\n    constructor() {\n    }\n\n    // create(competitionSport: CompetitionSport, roundNumber: RoundNumber, amount?: number, nrOfGamesPerPlace?: number): GameAmountConfig {\n    //     if (amount === undefined) {\n    //         amount = 1;\n    //     }\n    //     if (nrOfGamesPerPlace === undefined) {\n    //         nrOfGamesPerPlace = 0;\n    //     }\n    //     const variant = competitionSport.getVariant();\n    //     if (variant instanceof AgainstSportVariant) {\n    //         amount = variant.getNrOfGamePlaces() <= 2 ? variant.getNrOfH2H() : 0;\n    //         nrOfGamesPerPlace = variant.getNrOfGamePlaces() <= 2 ? 0 : variant.getNrOfGamesPerPlace();\n    //     }\n    //     return new GameAmountConfig(competitionSport, roundNumber, amount, nrOfGamesPerPlace);\n    // }\n\n    removeFromRoundNumber(competitionSport: CompetitionSport, roundNumber: RoundNumber) {\n        const gameAmountConfig = roundNumber.getGameAmountConfig(competitionSport);\n        if (gameAmountConfig) {\n            roundNumber.getGameAmountConfigs().splice(roundNumber.getGameAmountConfigs().indexOf(gameAmountConfig), 1);\n        }\n        const nextRoundNumber = roundNumber.getNext();\n        if (nextRoundNumber) {\n            this.removeFromRoundNumber(competitionSport, nextRoundNumber);\n        }\n    }\n}\n","import { Injectable } from '@angular/core';\n\nimport { CompetitionSport } from '../../competition/sport';\nimport { AgainstQualifyConfig } from '../againstConfig';\nimport { Round } from '../group';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class AgainstQualifyConfigService {\n\n    constructor(/*private competitionSportMapper: CompetitionSportMapper,\n        private againstQualifyConfigMapper: AgainstQualifyConfigMapper*/) {\n    }\n\n    createDefault(competitionSport: CompetitionSport, round: Round): AgainstQualifyConfig {\n        const sport = competitionSport.getSport();\n        const config = new AgainstQualifyConfig(competitionSport, round,\n            competitionSport.getDefaultPointsCalculation(),\n            competitionSport.getDefaultWinPoints(),\n            competitionSport.getDefaultDrawPoints(),\n            competitionSport.getDefaultWinPointsExt(),\n            competitionSport.getDefaultDrawPointsExt(),\n            competitionSport.getDefaultLosePointsExt()\n        );\n        return config;\n    }\n\n    removeFromRound(competitionSport: CompetitionSport, round: Round) {\n        const qualifyagainstConfig = round.getAgainstQualifyConfig(competitionSport);\n        if (qualifyagainstConfig) {\n            round.getAgainstQualifyConfigs().splice(round.getAgainstQualifyConfigs().indexOf(qualifyagainstConfig), 1);\n        }\n        round.getChildren().forEach((child: Round) => this.removeFromRound(competitionSport, child));\n    }\n\n    copy(competitionSport: CompetitionSport, round: Round, sourceConfig: AgainstQualifyConfig): AgainstQualifyConfig {\n        return new AgainstQualifyConfig(\n            competitionSport,\n            round,\n            sourceConfig.getPointsCalculation(),\n            sourceConfig.getWinPoints(),\n            sourceConfig.getDrawPoints(),\n            sourceConfig.getWinPointsExt(),\n            sourceConfig.getDrawPointsExt(),\n            sourceConfig.getLosePointsExt()\n        );\n    }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Structure } from '../../structure';\n\nimport { ScoreConfigService } from '../../score/config/service';\nimport { CompetitionSport } from '../sport';\nimport { GameAmountConfigService } from '../../planning/gameAmountConfig/service';\nimport { AgainstQualifyConfigService } from '../../qualify/againstConfig/service';\nimport { AgainstH2h } from '../../sport/variant/against/h2h';\nimport { GameAmountConfig } from '../../planning/gameAmountConfig';\nimport { Round } from '../../qualify/group';\nimport { Category } from '../../category';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class CompetitionSportEditor {\n    constructor(\n        private scoreConfigService: ScoreConfigService,\n        private gameAmountConfigService: GameAmountConfigService,\n        private againstQualifyConfigService: AgainstQualifyConfigService/*,\n        competitionSportMapper: CompetitionSportMapper,\n        sportMapper: SportMapper,*/\n    ) {\n        this.scoreConfigService = scoreConfigService;\n        this.gameAmountConfigService = gameAmountConfigService;\n        this.againstQualifyConfigService = againstQualifyConfigService;\n        // this.competitionSportMapper = competitionSportMapper;\n        // this.sportMapper = sportMapper;\n    }\n\n   \n    // createDefault(sport: Sport, competition: Competition, structure?: Structure): CompetitionSport {\n    //     const config = this.competitionSportMapper.toObject(this.createDefaultJson(sport, []), competition);\n    //     if (structure) {\n    //         this.addToStructure(config, structure);\n    //     }\n    //     return config;\n    // }\n\n    // copy(sourceConfig: SportConfig, competition: Competition): SportConfig {\n    //     const newConfig = new SportConfig(sourceConfig.getSport(), competition);\n\n    //     newConfig.setNrOfGamePlaces(sourceConfig.getNrOfGamePlaces());\n    //     return newConfig;\n    // }\n\n    addToStructure(competitionSport: CompetitionSport, structure: Structure) {\n\n        const variant = competitionSport.getVariant();\n        const amount = (variant instanceof AgainstH2h) ? variant.getNrOfH2H() : variant.getNrOfGamesPerPlace();\n        new GameAmountConfig(competitionSport, structure.getFirstRoundNumber(), amount);\n\n        structure.getCategories().forEach((category: Category) => {\n            this.addToCategory(competitionSport, category);\n        });\n    }\n\n    addToCategory(competitionSport: CompetitionSport, category: Category) {\n\n        // const variant = competitionSport.getVariant();\n        // const amount = (variant instanceof AgainstH2h) ? variant.getNrOfH2H() : variant.getNrOfGamesPerPlace();\n        // new GameAmountConfig(competitionSport, structure.getFirstRoundNumber(), amount);\n        const rootRound = category.getRootRound();\n        this.scoreConfigService.createDefault(competitionSport, rootRound);\n        this.againstQualifyConfigService.createDefault(competitionSport, rootRound);\n    }\n\n    removeFromStructure(competitionSport: CompetitionSport, structure: Structure) {\n        this.gameAmountConfigService.removeFromRoundNumber(competitionSport, structure.getFirstRoundNumber());\n        structure.getRootRounds().forEach((rootRound: Round) => {\n            this.scoreConfigService.removeFromRound(competitionSport, rootRound);\n            this.againstQualifyConfigService.removeFromRound(competitionSport, rootRound);\n        });\n\n    }\n\n}\n","import { Competitor } from \"../../competitor\";\nimport { StartLocation } from \"../startLocation\";\n\nexport class StartLocationMap extends Map<string, Competitor> {\n\n    constructor(competitors: Competitor[]) {\n        super();\n        competitors.forEach(competitor => {\n            this.set(competitor.getStartLocation().getStartId(), competitor);\n        });\n    }\n\n    public getCompetitor(startLocation: StartLocation): Competitor | undefined {\n        return this.get(startLocation.getStartId());\n    }\n}","export enum AnsiColor {\n    Red = 31,\n    Green = 32,\n    Yellow = 33,\n    Blue = 34,\n    Magenta = 35,\n    Cyan = 36,\n    White = 37\n}\n\nexport class AnsiColorHelper {\n    public static getColored(color: AnsiColor | undefined, content: string): string {\n        if (color === undefined) {\n            return content;\n        }\n        const coloredString = '\\u001b[' + color + 'm';\n        return coloredString + content + '\\u001b[39m';\n    }\n}","import { FormationLine } from \"./formation/line\";\n\nexport class Formation {\n    constructor(protected readonly lines: FormationLine[]) {\n    }\n\n    getLines(): FormationLine[] {\n        return this.lines.slice();\n    }\n\n    getName(): string {\n        return this.getLines().map((line: FormationLine) => line.getNrOfPersons()).join('-');\n    }\n\n    equals(formation: Formation): boolean {\n        return formation.getLines().every((formationLine: FormationLine): boolean => {\n            const thisLine = this.lines.find(line => line.getNumber() === formationLine.getNumber());\n            return thisLine !== undefined && formationLine.equals(thisLine);\n        }) && formation.getLines().length === this.getLines().length;\n    } \n}","import { FootballLine } from \"../sport/football\";\n\nexport class FormationLine {\n    constructor(\n        protected readonly number: FootballLine,\n        protected readonly nrOfPersons: number\n    ) {        \n    }\n\n    getNumber(): FootballLine {\n        return this.number;\n    }\n\n    getNrOfPersons(): number {\n        return this.nrOfPersons;\n    }\n\n    getNumbers(): number[] {\n        const numbers: number[] = [];\n        for (let number = 1; number <= this.nrOfPersons; number++) {\n            numbers.push(number);\n        }\n        return numbers;\n    }\n\n    equals(formationLine: FormationLine): boolean {\n        return this.getNumber() === formationLine.getNumber() && this.getNrOfPersons() === formationLine.getNrOfPersons();\n    } \n}","import { Injectable } from '@angular/core';\n\nimport { Formation } from '../formation';\nimport { JsonFormation } from './json';\nimport { FormationLine } from './line';\nimport { JsonFormationLine } from './line/json';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class FormationMapper {\n    toObject(json: JsonFormation): Formation {\n        const formation = new Formation(\n            json.lines.map((jsonLine: JsonFormationLine) => new FormationLine(jsonLine.number, jsonLine.nrOfPersons))\n        );\n        \n        return formation;\n    }\n\n    toJson(formation: Formation): JsonFormation {\n        return {\n            lines: formation.getLines().map((line: FormationLine): JsonFormationLine => {\n                return { number: line.getNumber(), nrOfPersons: line.getNrOfPersons() };\n            })\n        };\n    }\n}","import { Field } from './field';\nimport { Place } from './place';\nimport { Poule } from './poule';\nimport { Referee } from './referee';\nimport { CompetitionSport } from './competition/sport';\nimport { ScoreConfig } from './score/config';\nimport { Round } from './qualify/group';\nimport { Identifiable } from './identifiable';\nimport { AgainstGamePlace } from './game/place/against';\nimport { TogetherGamePlace } from './game/place/together';\nimport { Competition } from './competition';\nimport { PlanningConfig } from './planning/config';\nimport { GamePlace } from './game/place';\nimport { GameState } from './game/state';\nimport { StartLocationMap } from './competitor/startLocation/map';\n\nexport abstract class Game extends Identifiable {\n    protected field: Field | undefined;\n    protected referee: Referee | undefined;\n    protected refereePlace: Place | undefined;\n    protected state: GameState;\n    protected places: (AgainstGamePlace | TogetherGamePlace)[] = [];\n\n    constructor(protected poule: Poule, protected batchNr: number, protected startDateTime: Date, protected competitionSport: CompetitionSport) {\n        super();\n        this.state = GameState.Created;\n    }\n\n    getPoule(): Poule {\n        return this.poule;\n    }\n\n    getBatchNr(): number {\n        return this.batchNr;\n    }\n\n    getField(): Field | undefined {\n        return this.field;\n    }\n\n    setField(field: Field | undefined): void {\n        this.field = field;\n    }\n\n    getReferee(): Referee | undefined {\n        return this.referee;\n    }\n\n    setRefereePlace(refereePlace: Place | undefined): void {\n        this.refereePlace = refereePlace;\n    }\n\n    getRefereePlace(): Place | undefined {\n        return this.refereePlace;\n    }\n\n    setReferee(referee: Referee | undefined): void {\n        this.referee = referee;\n    }\n\n    getStartDateTime(): Date {\n        return this.startDateTime;\n    }\n\n    setStartDateTime(startDateTime: Date): void {\n        this.startDateTime = startDateTime;\n    }\n\n    getState(): GameState {\n        return this.state;\n    }\n\n    setState(state: GameState): void {\n        this.state = state;\n    }\n\n    getRound(): Round {\n        return this.getPoule().getRound();\n    }\n\n    getCompetition(): Competition {\n        return this.getCompetitionSport().getCompetition();\n    }\n\n    getCompetitionSport(): CompetitionSport {\n        return this.competitionSport;\n    }\n\n    getScoreConfig(): ScoreConfig {\n        return this.getRound().getValidScoreConfig(this.competitionSport);\n    }\n\n    getPlanningConfig(): PlanningConfig {\n        return this.getRound().getNumber().getValidPlanningConfig();\n    }\n\n    getPlaces(): (AgainstGamePlace | TogetherGamePlace)[] {\n        return this.places;\n    }\n\n    public hasCompetitor(startLocationMap: StartLocationMap): boolean {\n        return this.getPlaces().some((gamePlace: GamePlace): boolean => {\n            const startLocation = gamePlace.getPlace().getStartLocation();\n            if (startLocation === undefined) {\n                return false;\n            }\n            return startLocationMap.getCompetitor(startLocation) !== undefined;\n        });\n    }\n}\n","import { Game } from '../game';\nimport { CompetitionSport } from '../competition/sport';\nimport { AgainstQualifyConfig } from '../qualify/againstConfig';\nimport { Place } from '../place';\nimport { Poule } from '../poule';\nimport { AgainstGamePlace } from './place/against';\nimport { AgainstScore } from '../score/against';\nimport { AgainstSide } from '../against/side';\nimport { GameState } from './state';\n\nexport class AgainstGame extends Game {\n    protected scores: AgainstScore[] = [];\n    protected homeExtraPoints: number = 0;\n    protected awayExtraPoints: number = 0;\n\n    constructor(poule: Poule, batchNr: number, protected startDateTime: Date, competitionSport: CompetitionSport, protected gameRoundNumber: number) {\n        super(poule, batchNr, startDateTime, competitionSport);\n        poule.getAgainstGames().push(this);\n        this.state = GameState.Created;\n    }\n\n    getGameRoundNumber(): number {\n        return this.gameRoundNumber;\n    }\n\n    isParticipating(place: Place, side?: AgainstSide): boolean {\n        return this.getSidePlaces(side).find(gamePlace => gamePlace.getPlace() === place) !== undefined;\n    }\n\n    getAgainstPlaces(): AgainstGamePlace[] {\n        return <AgainstGamePlace[]>this.places;\n    }\n\n    getSidePlaces(side?: AgainstSide): AgainstGamePlace[] {\n        if (side === AgainstSide.Home) {\n            return this.getHomePlaces();\n        } else if (side === AgainstSide.Away) {\n            return this.getAwayPlaces();\n        }\n        return this.getAgainstPlaces();\n    }\n\n    getHomePlaces(): AgainstGamePlace[] {\n        return this.getAgainstPlaces().filter((place: AgainstGamePlace) => place.getSide() === AgainstSide.Home);\n    }\n\n    getAwayPlaces(): AgainstGamePlace[] {\n        return this.getAgainstPlaces().filter((place: AgainstGamePlace) => place.getSide() === AgainstSide.Away);\n    }\n\n    getScores(): AgainstScore[] {\n        return this.scores;\n    }\n\n    getSide(place: Place): AgainstSide | undefined {\n        if (this.isParticipating(place, AgainstSide.Home)) {\n            return AgainstSide.Home;\n        } else if (this.isParticipating(place, AgainstSide.Away)) {\n            return AgainstSide.Away;\n        }\n        return undefined;\n    }\n\n    getAgainstQualifyConfig(): AgainstQualifyConfig {\n        return this.getRound().getValidAgainstQualifyConfig(this.competitionSport);\n    }\n\n    getFinalPhase(): number {\n        if (this.scores.length === 0) {\n            return 0;\n        }\n        return this.scores[this.scores.length - 1].getPhase();\n    }\n\n    public getHomeExtraPoints(): number {\n        return this.homeExtraPoints;\n    }\n\n    public setHomeExtraPoints(homeExtraPoints: number): void {\n        this.homeExtraPoints = homeExtraPoints;\n    }\n\n    public getAwayExtraPoints(): number {\n        return this.awayExtraPoints;\n    }\n\n    public setAwayExtraPoints(awayExtraPoints: number): void {\n        this.awayExtraPoints = awayExtraPoints;\n    }\n}\n","export enum GameOrder {\n    ByPoule, ByBatch, ByDate\n}","import { Poule } from '../poule';\nimport { AgainstGame } from './against';\nimport { TogetherGame } from './together';\nimport { GameOrder } from './order';\nimport { CategoryMap } from '../category/map';\nimport { StructureCell } from '../structure/cell';\nimport { RoundNumber } from '../round/number';\n\nexport class GameGetter {\n    constructor() {\n\n    }\n\n    getGames(order: GameOrder, roundNumber: RoundNumber, categoryMap?: CategoryMap): (AgainstGame | TogetherGame)[] {\n        let structureCells = roundNumber.getStructureCells(categoryMap);\n        let games: (AgainstGame | TogetherGame)[] = [];\n        structureCells.forEach((structureCell: StructureCell) => {\n            structureCell.getPoules().forEach((poule: Poule) => games = games.concat(poule.getGames()));\n        });\n        return this.orderGames(order, games, roundNumber.isFirst());\n    }\n\n    private orderGames(order: GameOrder, games: (AgainstGame | TogetherGame)[], firstRoundNumber: boolean): (AgainstGame | TogetherGame)[] {\n        const baseSort = (g1: TogetherGame | AgainstGame, g2: TogetherGame | AgainstGame): number => {\n            const field1 = g1.getField();\n            const field2 = g2.getField();\n            if (field1 === undefined || field2 === undefined) {\n                return 0;\n            }\n            const retVal = field1.getPriority() - field2.getPriority();\n            return firstRoundNumber ? retVal : -retVal;\n        };\n\n        if (order === GameOrder.ByBatch) {\n            games.sort((g1: AgainstGame | TogetherGame, g2: AgainstGame | TogetherGame) => {\n                if (g1.getBatchNr() === g2.getBatchNr()) {\n                    return baseSort(g1, g2);\n                }\n                return g1.getBatchNr() - g2.getBatchNr();\n            });\n        } else {\n            if (order === GameOrder.ByDate) {\n                games.sort((g1: AgainstGame | TogetherGame, g2: AgainstGame | TogetherGame) => {\n                    const date1 = g1.getStartDateTime()?.getTime() ?? 0;\n                    const date2 = g2.getStartDateTime()?.getTime() ?? 0;\n                    if (date1 === date2) {\n                        return baseSort(g1, g2);\n                    }\n                    return date1 - date2;\n                });\n            }\n        }\n        return games;\n    }\n\n}\n","import { Game } from '../game';\nimport { CompetitionSport } from '../competition/sport';\nimport { Place } from '../place';\nimport { Poule } from '../poule';\nimport { TogetherGamePlace } from './place/together';\nimport { GameState } from './state';\n\nexport class TogetherGame extends Game {\n\n    constructor(poule: Poule, batchNr: number, protected startDateTime: Date, competitionSport: CompetitionSport) {\n        super(poule, batchNr, startDateTime, competitionSport);\n        poule.getTogetherGames().push(this);\n        this.state = GameState.Created;\n    }\n\n    getTogetherPlaces(): TogetherGamePlace[] {\n        return <TogetherGamePlace[]>this.places;\n    }\n\n    isParticipating(place: Place): boolean {\n        return this.places.find(gamePlace => gamePlace.getPlace() === place) !== undefined;\n    }\n}\n","import { Identifiable } from '../identifiable';\nimport { Place } from '../place';\nimport { AgainstGame } from './against';\nimport { TogetherGame } from './together';\nimport { GameParticipation } from './participation';\n\nexport abstract class GamePlace extends Identifiable {\n    protected participations: GameParticipation[] = [];\n\n    constructor(protected game: AgainstGame | TogetherGame, protected place: Place) {\n        super();\n    }\n\n    getPlace(): Place {\n        return this.place;\n    }\n\n    getGame(): AgainstGame | TogetherGame {\n        return this.game;\n    }\n\n    getParticipations(): GameParticipation[] {\n        return this.participations;\n    }\n}\n","import { AgainstSide } from '../../against/side';\nimport { Place } from '../../place';\nimport { AgainstGame } from '../against';\nimport { GamePlace } from '../place';\n\nexport class AgainstGamePlace extends GamePlace {\n\n    constructor(game: AgainstGame, place: Place, protected side: AgainstSide) {\n        super(game, place);\n        game.getPlaces().push(this);\n    }\n\n    getSide(): AgainstSide {\n        return this.side;\n    }\n}\n","import { Place } from '../../place';\nimport { TogetherScore } from '../../score/together';\nimport { GamePlace } from '../place';\nimport { TogetherGame } from '../together';\n\nexport class TogetherGamePlace extends GamePlace {\n    protected scores: TogetherScore[] = [];\n\n    constructor(game: TogetherGame, place: Place, protected gameRoundNumber: number) {\n        super(game, place);\n        game.getPlaces().push(this);\n    }\n\n    getGameRoundNumber(): number {\n        return this.gameRoundNumber;\n    }\n\n    getScores(): TogetherScore[] {\n        return this.scores;\n    }\n}\n","import { GamePhase } from './game/phase';\nimport { Identifiable } from './identifiable';\n\nexport class Score extends Identifiable {\n\n    constructor(protected phase: GamePhase, protected number: number) {\n        super();\n    }\n\n    getPhase(): GamePhase {\n        return this.phase;\n    }\n\n\n    getNumber(): number {\n        return this.number;\n    }\n}\n","import { AgainstResult } from '../against/result';\nimport { AgainstSide } from '../against/side';\nimport { AgainstGame } from '../game/against';\nimport { GamePhase } from '../game/phase';\nimport { Score } from '../score';\nimport { AgainstScoreHelper } from './againstHelper';\n\nexport class AgainstScore extends Score {\n    static readonly SCORED = 1;\n    static readonly RECEIVED = 2;\n    protected helper: AgainstScoreHelper;\n\n    constructor(protected game: AgainstGame, home: number, away: number, phase: GamePhase, number?: number) {\n        super(phase, number ? number : game.getScores().length + 1);\n        this.helper = new AgainstScoreHelper(home, away);\n        this.game.getScores().push(this);\n    }\n\n    getGame(): AgainstGame {\n        return this.game;\n    }\n\n    getHome(): number {\n        return this.helper.getHome();\n    }\n\n    getAway(): number {\n        return this.helper.getAway();\n    }\n\n    getResult(side: AgainstSide): AgainstResult {\n        return this.helper.getResult(side);\n    }\n}\n\n","import { GamePhase } from '../game/phase';\nimport { TogetherGamePlace } from '../game/place/together';\nimport { Score } from '../score';\n\nexport class TogetherScore extends Score {\n    constructor(protected gamePlace: TogetherGamePlace, protected score: number, phase: GamePhase, number?: number) {\n        super(phase, number ? number : gamePlace.getScores().length + 1);\n        this.gamePlace.getScores().push(this);\n    }\n\n    getGamePlace(): TogetherGamePlace {\n        return this.gamePlace;\n    }\n\n    getScore(): number {\n        return this.score;\n    }\n}\n","import { Injectable } from '@angular/core';\nimport { JsonAgainstScore } from './against/json';\nimport { AgainstGame } from '../game/against';\nimport { AgainstScore } from './against';\nimport { TogetherScore } from './together';\nimport { JsonTogetherScore } from './together/json';\nimport { TogetherGamePlace } from '../game/place/together';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class ScoreMapper {\n\n    constructor() { }\n\n    toAgainstObject(json: JsonAgainstScore, game: AgainstGame, score?: AgainstScore): AgainstScore {\n        if (score === undefined) {\n            score = new AgainstScore(game, json.home, json.away, json.phase, json.number);\n        }\n        score.setId(json.id);\n        return score;\n    }\n\n    toTogetherObject(json: JsonTogetherScore, gamePlace: TogetherGamePlace, score?: TogetherScore): TogetherScore {\n        if (score === undefined) {\n            score = new TogetherScore(gamePlace, json.score, json.phase, json.number);\n        }\n        score.setId(json.id);\n        return score;\n    }\n\n    toJsonAgainst(score: AgainstScore): JsonAgainstScore {\n        return {\n            id: score.getId(),\n            home: score.getHome(),\n            away: score.getAway(),\n            phase: score.getPhase(),\n            number: score.getNumber()\n        };\n    }\n\n    toJsonTogether(score: TogetherScore): JsonTogetherScore {\n        return {\n            id: score.getId(),\n            score: score.getScore(),\n            phase: score.getPhase(),\n            number: score.getNumber()\n        };\n    }\n}\n","import { Injectable } from '@angular/core';\n\nimport { GamePlace } from '../place';\nimport { AgainstGame } from '../against';\nimport { TogetherGame } from '../together';\nimport { JsonAgainstGamePlace } from './against/json';\nimport { JsonTogetherGamePlace } from './together/json';\nimport { AgainstGamePlace } from './against';\nimport { TogetherGamePlace } from './together';\nimport { ScoreMapper } from '../../score/mapper';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class GamePlaceMapper {\n\n    constructor(private scoreMapper: ScoreMapper) { }\n\n    toAgainstObject(json: JsonAgainstGamePlace, game: AgainstGame): GamePlace {\n        const place = game.getPoule().getPlace(json.placeNr);\n        const gamePlace = new AgainstGamePlace(game, place, json.side);\n        gamePlace.setId(json.id);\n        return gamePlace;\n    }\n\n    toTogetherObject(json: JsonTogetherGamePlace, game: TogetherGame): GamePlace {\n        const place = game.getPoule().getPlace(json.placeNr);\n        const gamePlace = new TogetherGamePlace(game, place, json.gameRoundNumber);\n        gamePlace.setId(json.id);\n        json.scores.map(jsonScore => this.scoreMapper.toTogetherObject(jsonScore, gamePlace));\n        return gamePlace;\n    }\n\n    toJsonAgainst(gamePlace: AgainstGamePlace): JsonAgainstGamePlace {\n        return {\n            id: gamePlace.getId(),\n            placeNr: gamePlace.getPlace().getPlaceNr(),\n            side: gamePlace.getSide()\n        };\n    }\n\n    toJsonTogether(gamePlace: TogetherGamePlace): JsonTogetherGamePlace {\n        const json = {\n            id: gamePlace.getId(),\n            placeNr: gamePlace.getPlace().getPlaceNr(),\n            gameRoundNumber: gamePlace.getGameRoundNumber(),\n            scores: []\n        };\n        return json;\n    }\n}\n","import { Injectable } from '@angular/core';\n\nimport { QualifyPathNode } from '../pathNode';\nimport { QualifyTarget } from '../target';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class QualifyPathNodeMapper {\n    constructor() {\n    }\n\n    toObject(pathNodeAsString: string): QualifyPathNode|undefined {\n        if (pathNodeAsString.length === 0) {\n            return undefined;\n        }\n        return this.createRootPathNode(pathNodeAsString);\n    }\n\n    toString(qualifyPathNode: QualifyPathNode): string {\n        return qualifyPathNode.pathToString();\n    }\n\n    private createRootPathNode(pathNodeAsString: string): QualifyPathNode {\n        // root\n        const qualifyTargetPos = this.getPosQualifyTargetCharacter(pathNodeAsString, 0);\n        if (qualifyTargetPos === false) {\n            // console.log('pathNodeAsString', pathNodeAsString);\n            const rootNodeRoundNumber = +pathNodeAsString;\n            if (isNaN(rootNodeRoundNumber) ) {\n                throw new Error('rootNodeRoundNumber is NotANumber 1');\n            }\n            // console.log('rootNodeRoundNumber', rootNodeRoundNumber);\n            return new QualifyPathNode(undefined, rootNodeRoundNumber, undefined);\n        }\n        const rootNodeRoundNumber = +pathNodeAsString.substring(0, qualifyTargetPos);\n        const rootPathNode = new QualifyPathNode(undefined, rootNodeRoundNumber, undefined);\n        return this.createPathNodeRecursive(pathNodeAsString, qualifyTargetPos, rootPathNode);\n    }\n\n    private createPathNodeRecursive(pathNodeAsString: string, qualifyTargetPos: number, previous: QualifyPathNode): QualifyPathNode {\n        // console.log('qualifyTargetPos: ' + qualifyTargetPos);\n        // console.log('qualifyTarget from Path: ' + pathNodeAsString.substring(qualifyTargetPos, qualifyTargetPos + 1));        \n        const qualifyTargetAsString = pathNodeAsString.substring(qualifyTargetPos, qualifyTargetPos + 1);\n        const qualifyTarget = QualifyTarget.Winners === qualifyTargetAsString ? QualifyTarget.Winners : QualifyTarget.Losers;\n        // console.log('qualifyTarget', qualifyTarget);\n\n        const roundNumberStartPos = qualifyTargetPos + 1;\n        const nextQualifyTargetPos = this.getPosQualifyTargetCharacter(pathNodeAsString, qualifyTargetPos + 1);\n        if (nextQualifyTargetPos === false) {\n            const qualifyGroupNumber = +pathNodeAsString.substring(roundNumberStartPos);\n            if (isNaN(qualifyGroupNumber)) {\n                throw new Error('rootNodeRoundNumber is NotANumber 2');\n            }\n            return previous.createNext(qualifyTarget, qualifyGroupNumber);\n        }\n        const qualifyGroupNumber = +pathNodeAsString.substring(roundNumberStartPos, nextQualifyTargetPos);\n        if (isNaN(qualifyGroupNumber)) {\n            // console.log(pathNodeAsString, roundNumberStartPos, nextQualifyTargetPos);\n            throw new Error('rootNodeRoundNumber is NotANumber 3');\n        }\n        const pathNode = previous.createNext(qualifyTarget, qualifyGroupNumber);\n        return this.createPathNodeRecursive(pathNodeAsString, nextQualifyTargetPos, pathNode);\n    }\n\n    private getPosQualifyTargetCharacter(pathNodeAsString: string, fromIndex: number): number | false {\n\n        const posFirstWinnersCharacter = pathNodeAsString.indexOf(QualifyTarget.Winners, fromIndex);\n        const posFirstLosersCharacter = pathNodeAsString.indexOf(QualifyTarget.Losers, fromIndex);\n        if (posFirstWinnersCharacter === -1 && posFirstLosersCharacter === -1) {\n            return false;\n        }\n        if (posFirstWinnersCharacter === -1) {\n            return posFirstLosersCharacter;\n        }\n        if (posFirstLosersCharacter === -1) {\n            return posFirstWinnersCharacter;\n        }\n        return Math.min(posFirstLosersCharacter, posFirstWinnersCharacter);\n    }\n}\n","import { Injectable } from '@angular/core';\n\nimport { JsonStructureLocation } from './json';\nimport { StructureLocation } from '../location';\nimport { PlaceLocation } from '../../place/location';\nimport { QualifyPathNodeMapper } from '../../qualify/pathNode/mapper';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class StructureLocationMapper {\n    constructor(private qualifyNodeMapper: QualifyPathNodeMapper) { }\n\n    toObject(json: JsonStructureLocation): StructureLocation {\n        return new StructureLocation(\n            json.categoryNr,\n            this.qualifyNodeMapper.toObject(json.pathNode),\n            new PlaceLocation(json.placeLocation.pouleNr, json.placeLocation.placeNr)\n        );\n    }\n\n    toJson(structureLocation: StructureLocation): JsonStructureLocation {\n        const placeLocation = structureLocation.getPlaceLocation(); \n        return {\n            categoryNr: structureLocation.getCategoryNr(),\n            pathNode: structureLocation.getPathNode().pathToString(),\n            placeLocation: {\n                pouleNr: placeLocation.getPouleNr(), placeNr: placeLocation.getPlaceNr() }\n        };\n    }\n}","import { Injectable } from '@angular/core';\n\nimport { Game } from '../game';\nimport { Poule } from '../poule';\nimport { GamePlaceMapper } from './place/mapper';\nimport { JsonTogetherGame } from './together/json';\nimport { JsonAgainstGame } from './against/json';\nimport { AgainstGame } from './against';\nimport { TogetherGame } from './together';\nimport { CompetitionSportMap } from '../competition/sport/mapper';\nimport { ScoreMapper } from '../score/mapper';\nimport { FieldMapper } from '../field/mapper';\nimport { RefereeMapper } from '../referee/mapper';\nimport { PlaceMap } from '../place/mapper';\nimport { CompetitionSport } from '../competition/sport';\nimport { Place } from '../place';\nimport { AgainstVariant } from '../sport/variant/against';\nimport { JsonTogetherGamePlace } from './place/together/json';\nimport { JsonTogetherScore } from '../score/together/json';\nimport { TogetherGamePlace } from './place/together';\nimport { StructureLocation } from '../structure/location';\nimport { StructureLocationMapper } from '../structure/location/mapper';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class GameMapper {\n    private placeMap: PlaceMap | undefined;\n\n    constructor(\n        private gamePlaceMapper: GamePlaceMapper,\n        private fieldMapper: FieldMapper,\n        private refereeMapper: RefereeMapper,\n        private scoreMapper: ScoreMapper,\n        private structureLocationMapper: StructureLocationMapper\n    ) { }\n\n    setPlaceMap(placeMap: PlaceMap) {\n        this.placeMap = placeMap;\n    }\n\n    toNew(json: JsonTogetherGame | JsonAgainstGame, poule: Poule, map: CompetitionSportMap): TogetherGame | AgainstGame {\n        const competitionSport = map[json.competitionSportId];\n        if (competitionSport.getVariant() instanceof AgainstVariant) {\n            return this.toNewAgainst(<JsonAgainstGame>json, poule, competitionSport);\n        }\n        return this.toNewTogether(<JsonTogetherGame>json, poule, competitionSport);\n    }\n\n    toNewAgainst(json: JsonAgainstGame, poule: Poule, competitionSport: CompetitionSport): AgainstGame {\n        const game = new AgainstGame(poule, json.batchNr, new Date(json.startDateTime), competitionSport, json.gameRoundNumber);\n        this.toNewHelper(json, game);\n        game.setHomeExtraPoints(json.homeExtraPoints);\n        game.setAwayExtraPoints(json.awayExtraPoints);\n        json.scores.map(jsonScore => this.scoreMapper.toAgainstObject(jsonScore, game));\n        json.places.map(jsonGamePlace => this.gamePlaceMapper.toAgainstObject(jsonGamePlace, game));\n        return game;\n    }\n\n    toNewTogether(json: JsonTogetherGame, poule: Poule, competitionSport: CompetitionSport): TogetherGame {\n        const game = new TogetherGame(poule, json.batchNr, new Date(json.startDateTime), competitionSport);\n        this.toNewHelper(json, game);\n        json.places.map(jsonGamePlace => this.gamePlaceMapper.toTogetherObject(jsonGamePlace, game));\n        return game;\n    }\n\n    protected toNewHelper(json: JsonAgainstGame | JsonTogetherGame, game: AgainstGame | TogetherGame): AgainstGame | TogetherGame {\n        game.setId(json.id);\n        game.setState(json.state);\n        if (json.fieldId) {\n            game.setField(this.fieldMapper.getFromCompetitionSport(json.fieldId, game.getCompetitionSport()));\n        }\n        if (json.refereeId) {\n            game.setReferee(this.refereeMapper.getFromCompetition(json.refereeId, game.getCompetition()));\n        }\n\n        if (json.refereeStructureLocation) {\n            const refereeStructureLocation = this.structureLocationMapper.toObject(json.refereeStructureLocation);\n            game.setRefereePlace(this.getRefereePlace(refereeStructureLocation));\n        }\n        game.setStartDateTime(new Date(json.startDateTime));\n        return game;\n    }\n\n    protected getRefereePlace(refereeStructureLocation: StructureLocation): Place | undefined {\n        if (this.placeMap === undefined) {\n            return undefined;\n        }\n        return this.placeMap[refereeStructureLocation.toString()];\n    }\n\n    toExisting(json: JsonTogetherGame | JsonAgainstGame, game: TogetherGame | AgainstGame): TogetherGame | AgainstGame {\n        if (game instanceof AgainstGame) {\n            return this.toExistingAgainst(<JsonAgainstGame>json, game);\n        }\n        return this.toExistingTogether(<JsonTogetherGame>json, game);\n    }\n\n    toExistingTogether(json: JsonTogetherGame, game: TogetherGame): TogetherGame {\n        json.places.forEach((jsonGamePlace: JsonTogetherGamePlace) => {\n            const gamePlace = this.getGamePlaceById(game.getTogetherPlaces(), jsonGamePlace.id);\n            if( gamePlace === undefined) {\n                return;\n            }\n            while (gamePlace.getScores().length > 0) {\n                gamePlace.getScores().pop();\n            }\n            jsonGamePlace.scores.forEach((jsonScore: JsonTogetherScore) => {\n                this.scoreMapper.toTogetherObject(jsonScore, gamePlace);\n            });\n        });\n        this.toExistingHelper(json, game);\n        return game;\n    }\n\n    private getGamePlaceById(gamePlaces: TogetherGamePlace[], id: string|number): TogetherGamePlace|undefined {\n        return gamePlaces.find(gamePlace => gamePlace.getId() === id);\n    }\n\n    toExistingAgainst(json: JsonAgainstGame, game: AgainstGame): AgainstGame {\n        while (game.getScores().length > 0) {\n            game.getScores().pop();\n        }\n        json.scores.map(jsonScore => this.scoreMapper.toAgainstObject(jsonScore, game));\n        game.setHomeExtraPoints(json.homeExtraPoints);\n        game.setAwayExtraPoints(json.awayExtraPoints);\n        this.toExistingHelper(json, game);\n        return game;\n    }\n\n    protected toExistingHelper(json: JsonAgainstGame | JsonTogetherGame, game: Game | TogetherGame) {\n        game.setState(json.state);\n        game.setStartDateTime(new Date(json.startDateTime));\n        return game;\n    }\n\n    toJson(game: AgainstGame | TogetherGame): JsonAgainstGame | JsonTogetherGame {\n        return (game instanceof AgainstGame) ? this.toJsonAgainst(game) : this.toJsonTogether(game);\n    }\n\n    toJsonAgainst(game: AgainstGame): JsonAgainstGame {\n        const field = game.getField();\n        const referee = game.getReferee();\n        const refereePlace = game.getRefereePlace();\n        let refereeStructureLocation = undefined;\n        if ( refereePlace ) {\n            refereeStructureLocation = this.structureLocationMapper.toJson(refereePlace.getStructureLocation());\n        }\n        return {\n            id: game.getId(),\n            places: game.getAgainstPlaces().map(gamePlace => this.gamePlaceMapper.toJsonAgainst(gamePlace)),\n            competitionSportId: game.getCompetitionSport().getId(),\n            batchNr: game.getBatchNr(),\n            fieldId: field?.getId(),\n            refereeId: referee?.getId(),\n            state: game.getState(),\n            refereeStructureLocation: refereeStructureLocation,\n            startDateTime: game.getStartDateTime()?.toISOString(),\n            scores: game.getScores().map(score => this.scoreMapper.toJsonAgainst(score)),\n            gameRoundNumber: game.getGameRoundNumber(),\n            homeExtraPoints: game.getHomeExtraPoints(),\n            awayExtraPoints: game.getAwayExtraPoints()\n        };\n    }\n\n    toJsonTogether(game: TogetherGame): JsonTogetherGame {\n        const field = game.getField();\n        const referee = game.getReferee();\n        const refereePlace = game.getRefereePlace();\n        let refereeStructureLocation = undefined;\n        if (refereePlace) {\n            refereeStructureLocation = this.structureLocationMapper.toJson(refereePlace.getStructureLocation());\n        }\n        return {\n            id: game.getId(),\n            places: game.getTogetherPlaces().map(gamePlace => this.gamePlaceMapper.toJsonTogether(gamePlace)),\n            competitionSportId: game.getCompetitionSport().getId(),\n            batchNr: game.getBatchNr(),\n            fieldId: field?.getId(),\n            refereeId: referee?.getId(),\n            state: game.getState(),\n            refereeStructureLocation: refereeStructureLocation,\n            startDateTime: game.getStartDateTime()?.toISOString()\n        };\n    }\n}\n","export enum GamePhase {\n    RegularTime = 1, ExtraTime = 2, Penalties = 4\n}","export enum PlanningEditMode {\n    Auto = 'auto', Manual = 'manual'\n}","export enum GamePlaceStrategy {\n    EquallyAssigned = 1, RandomlyAssigned\n}","export enum PointsCalculation { AgainstGamePoints = 'againstGamePoints', Scores = 'scores', Both = 'both' }","export enum FootballLine {\n    GoalKeeper = 1,\n    Defense = 2,\n    Midfield = 4,\n    Forward = 8\n}","export enum RankingRule {\n    MostPoints = 1,\n    FewestGames,\n    BestUnitDifference,\n    MostUnitsScored,\n    BestAmongEachOther,\n    BestSubUnitDifference,\n    MostSubUnitsScored\n}","import { RankingRule } from \"../rule\";\nimport { AgainstRuleSet } from \"../againstRuleSet\";\n\nexport class RankingRuleGetter {\n\n    getRules(ruleSet: AgainstRuleSet | undefined, useSubScore: boolean): RankingRule[] {\n        if (ruleSet === undefined) {\n            return this.getTogetherRules(useSubScore);\n        }\n        return this.getAgainstRules(ruleSet, useSubScore);\n    }\n\n    protected getAgainstRules(ruleSet: AgainstRuleSet, useSubScore: boolean): RankingRule[] {\n        const rules: RankingRule[] = [RankingRule.MostPoints, RankingRule.FewestGames];\n        if (ruleSet === AgainstRuleSet.AmongFirst) {\n            rules.push(RankingRule.BestAmongEachOther);\n        }\n        rules.push(RankingRule.BestUnitDifference);\n        rules.push(RankingRule.MostUnitsScored);\n        if (useSubScore) {\n            rules.push(RankingRule.BestSubUnitDifference);\n            rules.push(RankingRule.MostSubUnitsScored);\n        }\n        if (ruleSet === AgainstRuleSet.DiffFirst) {\n            rules.push(RankingRule.BestAmongEachOther);\n        }\n        return rules;\n    }\n\n    protected getTogetherRules(useSubScore: boolean): RankingRule[] {\n        const rules: RankingRule[] = [RankingRule.MostUnitsScored];\n        if (useSubScore) {\n            rules.push(RankingRule.MostSubUnitsScored);\n        }\n        rules.push(RankingRule.FewestGames);\n        return rules;\n    }\n}\n","import { GameMode } from './planning/gameMode';\nimport { PointsCalculation } from './ranking/pointsCalculation';\nimport { FootballLine } from './sport/football';\nimport { RankingRule } from './ranking/rule';\nimport { RankingRuleGetter } from './ranking/rule/getter';\nimport { AgainstRuleSet } from './ranking/againstRuleSet';\nimport { QualifyTarget } from './qualify/target';\n\nexport class NameService {\n\n    constructor(/*private competitorMap?: CompetitorMap*/) {\n    }\n\n    /*getCompetitorMap(): CompetitorMap | undefined {\n        return this.competitorMap;\n    }*/\n\n    getQualifyTargetDescription(qualifyTarget: QualifyTarget, multiple: boolean = false): string {\n        const descr = qualifyTarget === QualifyTarget.Winners ? 'winnaar' : (qualifyTarget === QualifyTarget.Losers ? 'verliezer' : '');\n        return ((multiple && (descr !== '')) ? descr + 's' : descr);\n    }\n\n\n    getFormationLineName(line: FootballLine | undefined): string {\n        if (line === FootballLine.GoalKeeper) {\n            return 'keeper';\n        } else if (line === FootballLine.Defense) {\n            return 'verdediging';\n        } else if (line === FootballLine.Midfield) {\n            return 'middenveld';\n        } else if (line === FootballLine.Forward) {\n            return 'aanval';\n        }\n        return 'alle linies';\n    }\n\n    getGameModeName(gameMode: GameMode): string {\n        switch (gameMode) {\n            case GameMode.Single:\n                return 'alleen';\n            case GameMode.Against:\n                return 'tegen elkaar';\n        }\n        return 'iedereen tegelijk tegen elkaar';\n    }\n\n    getPointsCalculationName(pointsCalculation: PointsCalculation): string {\n        switch (pointsCalculation) {\n            case PointsCalculation.AgainstGamePoints:\n                return 'alleen punten';\n            case PointsCalculation.Scores:\n                return 'alleen score';\n        }\n        return 'punten + score';\n    }\n\n    getNrOfGamePlacesName(nrOfGamePlaces: number): string {\n        switch (nrOfGamePlaces) {\n            case 0:\n                return 'alle deelnemers';\n            case 1:\n                return '1 deelnemer';\n        }\n        return nrOfGamePlaces + ' deelnemers';\n    }\n\n    getRulesName(againstRuleSet: AgainstRuleSet | undefined): string[] {\n        const rankingRuleGetter = new RankingRuleGetter();\n        return rankingRuleGetter.getRules(againstRuleSet, false).map((rule: RankingRule): string => {\n            switch (rule) {\n                case RankingRule.MostPoints:\n                    return 'meeste aantal punten';\n                case RankingRule.FewestGames:\n                    return 'minste aantal wedstrijden';\n                case RankingRule.BestUnitDifference:\n                    return 'beste saldo';\n                case RankingRule.MostUnitsScored:\n                    return 'meeste aantal eenheden voor';\n                case RankingRule.BestAmongEachOther:\n                    return 'beste onderling resultaat';\n                case RankingRule.BestSubUnitDifference:\n                    return 'beste subsaldo';\n                case RankingRule.MostSubUnitsScored:\n                    return 'meeste aantal subeenheden voor';\n            }\n        });\n    }\n}","import { Identifiable } from './identifiable';\n\nexport class Person extends Identifiable {\n\n    constructor(protected firstName: string, protected nameInsertion: string | undefined, protected lastName: string) {\n        super();\n    }\n\n    public getFirstName(): string {\n        return this.firstName;\n    }\n\n    public getNameInsertion(): string | undefined {\n        return this.nameInsertion;\n    }\n\n    public getLastName(): string {\n        return this.lastName;\n    }\n\n    public getName(): string {\n        let name = this.firstName.substr(0, 1);\n        if (this.nameInsertion) {\n            if (name.length > 0) {\n                name += \" \";\n            }\n            name += this.nameInsertion;\n        }\n        if (this.lastName?.length > 0) {\n            if (name.length > 0) {\n                name += \" \";\n            }\n            name += this.lastName;\n        }\n        return name;\n    }\n}\n","import { Period } from '../period';\nimport { Person } from '../person';\nimport { Team } from '../team';\n\nexport class Player extends Period {\n    protected id: string | number = 0;\n\n    constructor(protected team: Team, protected person: Person, start: Date, end: Date, protected line: number) {\n        super(start, end);\n        // person.getPlayers().push(this);\n    }\n\n    public getId(): string | number {\n        return this.id;\n    }\n\n    public setId(id: string | number): void {\n        this.id = id;\n    }\n\n    public getTeam(): Team {\n        return this.team;\n    }\n\n    public getPerson(): Person {\n        return this.person;\n    }\n\n    public getLine(): number {\n        return this.line;\n    }\n}\n","import { Injectable } from '@angular/core';\nimport { Association } from '../../association';\nimport { Person } from '../../person';\nimport { TeamMapper } from '../mapper';\nimport { JsonPlayer } from './json';\nimport { Player } from '../player';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class PlayerMapper {\n\n    constructor(protected teamMapper: TeamMapper) {\n    }\n\n    toObject(json: JsonPlayer, association: Association, person: Person): Player {\n        const player = new Player(\n            this.teamMapper.toObject(json.team, association),\n            person,\n            new Date(json.start), new Date(json.end),\n            json.line);\n\n        player.setId(json.id);\n\n        return player;\n    }\n\n    toJson(player: Player): JsonPlayer {\n        return {\n            id: player.getId(),\n            team: this.teamMapper.toJson(player.getTeam()),\n            start: player.getStartDateTime().toISOString(),\n            end: player.getEndDateTime().toISOString(),\n            line: player.getLine()\n        };\n    }\n}\n\n","import { Injectable } from '@angular/core';\nimport { PlayerMapper } from '../team/player/mapper';\nimport { Association } from '../association';\nimport { Person } from '../person';\nimport { TeamMapper } from '../team/mapper';\nimport { JsonPerson } from './json';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class PersonMapper {\n    protected cache: PersonMap = new PersonMap();\n\n    constructor(protected teamMapper: TeamMapper, protected playerMapper: PlayerMapper) {\n    }\n\n    protected createObject(json: JsonPerson): Person {\n        return new Person(json.firstName, json.nameInsertion, json.lastName);\n    }\n\n    toObject(json: JsonPerson, association: Association, disableCache?: boolean): Person {\n        let cachedPerson = (disableCache !== true) ? this.cache.get(+json.id) : undefined;\n        let person: Person;\n        if (cachedPerson === undefined) {\n            person = this.createObject(json);\n            person.setId(json.id);\n            this.cache.set(+person.getId(), person);\n        } else {\n            person = cachedPerson;\n        }       \n        return person;\n    }\n\n    toJson(person: Person): JsonPerson {\n        return {\n            id: +person.getId(),\n            firstName: person.getFirstName(),\n            nameInsertion: person.getNameInsertion(),\n            lastName: person.getLastName()\n        };\n    }\n}\n\nexport class PersonMap extends Map<number, Person> {\n\n}\n\n","import { Injectable } from '@angular/core';\n\nimport { RoundNumber } from '../round/number';\nimport { GameMapper } from '../game/mapper';\nimport { Competition } from '../competition';\nimport { CompetitionSport } from '../competition/sport';\nimport { PlaceMap } from '../place/mapper';\nimport { CompetitionSportMap } from '../competition/sport/mapper';\nimport { JsonAgainstGame } from '../game/against/json';\nimport { JsonTogetherGame } from '../game/together/json';\nimport { JsonPoule } from '../poule/json';\nimport { Poule } from '../poule';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class PlanningMapper {\n    constructor(private gameMapper: GameMapper) { }\n\n    setPlaceMap(placeMap: PlaceMap) {\n        this.gameMapper.setPlaceMap(placeMap);\n    }\n\n    toObject(jsonPoules: JsonPoule[], roundNumber: RoundNumber, competitionSportMap: CompetitionSportMap): boolean {\n        const poules = roundNumber.getPoules(undefined);\n        const complete = jsonPoules.every((jsonPoule: JsonPoule) => {\n            const poule = poules.find((poule: Poule): boolean => {\n                return poule.getId() === jsonPoule.id;\n            });\n            if (poule === undefined) {\n                return false;\n            }\n            return this.toPouleGames(jsonPoule, poule, competitionSportMap);\n        });\n        return jsonPoules.length > 0 && complete;\n    }\n\n    protected toPouleGames(jsonPoule: JsonPoule, poule: Poule, competitionSportMap: CompetitionSportMap): boolean {\n        if (jsonPoule.againstGames === undefined || jsonPoule.togetherGames === undefined) {\n            return false;\n        }\n\n        jsonPoule.againstGames.forEach((jsonGame: JsonAgainstGame) => {\n            const competitionSport = competitionSportMap[jsonGame.competitionSportId];\n            this.gameMapper.toNewAgainst(jsonGame, poule, competitionSport);\n        });\n        jsonPoule.togetherGames.forEach((jsonGame: JsonTogetherGame) => {\n            const competitionSport = competitionSportMap[jsonGame.competitionSportId];\n            this.gameMapper.toNewTogether(jsonGame, poule, competitionSport);\n        });\n        return poule.getGames().length > 0;\n    }\n}\n\nexport interface RoundNumbersReferenceMap {\n    [key: number]: PlanningReferences;\n}\n\nexport interface PlanningReferences {\n    places: PlaceMap,\n    sports: CompetitionSportMap,\n}\n","export enum SelfReferee { Disabled = 'disabled', OtherPoules = 'otherPoules', SamePoule = 'samePoule' }","\nimport { Identifiable } from '../identifiable';\nimport { SelfReferee } from '../referee/self';\nimport { RoundNumber } from '../round/number';\nimport { PlanningEditMode } from './editMode';\nimport { GamePlaceStrategy } from './strategy';\n\nexport class PlanningConfig extends Identifiable {\n    constructor(\n        protected roundNumber: RoundNumber,\n        protected editMode: PlanningEditMode,\n        protected gamePlaceStrategy: GamePlaceStrategy,\n        protected extension: boolean,\n        protected enableTime: boolean,\n        protected minutesPerGame: number,\n        protected minutesPerGameExt: number,\n        protected minutesBetweenGames: number,\n        protected minutesAfter: number,\n        protected perPoule: boolean,\n        protected selfReferee: SelfReferee,\n        protected nrOfSimSelfRefs: number,\n        protected bestLast: boolean,\n        ) {\n        super();\n        this.roundNumber.setPlanningConfig(this);\n    }\n\n    getEditMode(): PlanningEditMode {\n        return this.editMode;\n    }\n\n    getGamePlaceStrategy(): GamePlaceStrategy {\n        return this.gamePlaceStrategy;\n    }\n\n    getExtension(): boolean {\n        return this.extension;\n    }\n\n    getEnableTime(): boolean {\n        return this.enableTime;\n    }\n\n    getMinutesPerGame(): number {\n        return this.minutesPerGame;\n    }\n\n    getMinutesPerGameExt(): number {\n        return this.minutesPerGameExt;\n    }\n\n    getMinutesBetweenGames(): number {\n        return this.minutesBetweenGames;\n    }\n\n    getMinutesAfter(): number {\n        return this.minutesAfter;\n    }\n\n    getPerPoule(): boolean {\n        return this.perPoule;\n    }\n\n    getSelfReferee(): SelfReferee {\n        return this.selfReferee;\n    }\n\n    selfRefereeEnabled(): boolean {\n        return this.selfReferee !== SelfReferee.Disabled;\n    }\n\n    getNrOfSimSelfRefs(): number{\n        return this.nrOfSimSelfRefs;\n    }\n\n    getBestLast(): boolean {\n        return this.bestLast;\n    }\n\n    getMaxNrOfMinutesPerGame(): number {\n        return this.getMinutesPerGame() + (this.extension ? this.getMinutesPerGameExt() : 0);\n    }\n\n    getRoundNumber(): RoundNumber {\n        return this.roundNumber;\n    }\n}\n\n","import { Injectable } from '@angular/core';\nimport { SelfReferee } from '../../referee/self';\n\nimport { RoundNumber } from '../../round/number';\nimport { PlanningConfig } from '../config';\nimport { PlanningEditMode } from '../editMode';\nimport { GamePlaceStrategy } from '../strategy';\nimport { JsonPlanningConfig } from './json';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class PlanningConfigMapper {\n    constructor() { }\n\n    toObject(json: JsonPlanningConfig | undefined, roundNumber: RoundNumber): PlanningConfig {\n        if (json === undefined) {\n            return new PlanningConfig(\n                roundNumber,\n                PlanningEditMode.Manual,\n                GamePlaceStrategy.EquallyAssigned,\n                false,\n                false,\n                0,\n                0,\n                0,\n                0,\n                false,\n                SelfReferee.Disabled,\n                0,\n                false\n            );\n        }\n        return new PlanningConfig(\n            roundNumber,\n            json.editMode,\n            json.gamePlaceStrategy,\n            json.extension,\n            json.enableTime,\n            json.minutesPerGame,\n            json.minutesPerGameExt,\n            json.minutesBetweenGames,\n            json.minutesAfter,\n            json.perPoule,\n            json.selfReferee,\n            json.nrOfSimSelfRefs,\n            json.bestLast);\n    }\n\n    toJson(config: PlanningConfig): JsonPlanningConfig {\n        return {\n            id: config.getId(),\n            editMode: config.getEditMode(),\n            gamePlaceStrategy: config.getGamePlaceStrategy(),\n            extension: config.getExtension(),\n            enableTime: config.getEnableTime(),\n            minutesPerGame: config.getMinutesPerGame(),\n            minutesPerGameExt: config.getMinutesPerGameExt(),\n            minutesBetweenGames: config.getMinutesBetweenGames(),\n            minutesAfter: config.getMinutesAfter(),\n            perPoule: config.getPerPoule(),\n            selfReferee: config.getSelfReferee(),\n            nrOfSimSelfRefs: config.getNrOfSimSelfRefs(),\n            bestLast: config.getBestLast()\n        };\n    }\n}\n","import { Injectable } from '@angular/core';\n\nimport { RoundNumber } from '../../round/number';\nimport { GameAmountConfig } from '../gameAmountConfig';\nimport { JsonGameAmountConfig } from './json';\n@Injectable({\n    providedIn: 'root'\n})\nexport class GameAmountConfigMapper {\n    constructor() { }\n\n    toObject(json: JsonGameAmountConfig, roundNumber: RoundNumber, config?: GameAmountConfig): GameAmountConfig {\n        if (config === undefined) {\n            const competitionSport = roundNumber.getCompetition().getSportById(json.competitionSportId);\n            if (competitionSport === undefined) {\n                throw new Error('competitionSport could not be found');\n            }\n            const newConfig = new GameAmountConfig(competitionSport, roundNumber, json.amount);\n            config = newConfig;\n        }\n        config.setId(json.id);\n        config.setAmount(json.amount);\n        return config;\n    }\n\n    toJson(config: GameAmountConfig): JsonGameAmountConfig {\n        return {\n            id: config.getId(),\n            competitionSportId: config.getCompetitionSport().getId(),\n            amount: config.getAmount()\n        };\n    }\n}\n","import { Place } from \"../place\";\nimport { PlaceLocation } from \"./location\";\nimport { PlaceSportPerformance } from \"./sportPerformance\";\n\nexport class PlacePerformance {\n    private games = 0;\n    private points = 0;\n    private scored = 0;\n    private received = 0;\n    private subScored = 0;\n    private subReceived = 0;\n\n    constructor(private place: Place) {\n    }\n\n    getPlace(): Place {\n        return this.place;\n    }\n\n    getPlaceLocation(): PlaceLocation {\n        return this.place;\n    }\n\n    getGames(): number {\n        return this.games;\n    }\n\n    addGames(games: number) {\n        this.games += games;\n    }\n\n    getPoints(): number {\n        return this.points;\n    }\n\n    addPoints(points: number) {\n        this.points += points;\n    }\n\n    getScored(): number {\n        return this.scored;\n    }\n\n    addScored(scored: number) {\n        this.scored += scored;\n    }\n\n    getReceived(): number {\n        return this.received;\n    }\n\n    addReceived(received: number) {\n        this.received += received;\n    }\n\n    getDiff(): number {\n        return this.getScored() - this.getReceived();\n    }\n\n    getSubScored(): number {\n        return this.subScored;\n    }\n\n    addSubScored(subScored: number) {\n        this.subScored += subScored;\n    }\n\n    getSubReceived(): number {\n        return this.subReceived;\n    }\n\n    addSubReceived(subReceived: number) {\n        this.subReceived += subReceived;\n    }\n\n    getSubDiff(): number {\n        return this.getSubScored() - this.getSubReceived();\n    }\n\n    addSportPerformace(sportPerformance: PlaceSportPerformance) {\n        this.addGames(sportPerformance.getGames());\n        this.addPoints(sportPerformance.getPoints());\n        this.addScored(sportPerformance.getScored());\n        this.addReceived(sportPerformance.getReceived());\n        this.addSubScored(sportPerformance.getSubScored());\n        this.addSubReceived(sportPerformance.getSubReceived());\n    }\n}\n","import { CompetitionSport } from \"../competition/sport\";\nimport { Place } from \"../place\";\nimport { PlacePerformance } from \"./performance\";\n\nexport class PlaceSportPerformance extends PlacePerformance {\n    constructor(place: Place, private competitionSport: CompetitionSport, extraPoints?: number) {\n        super(place);\n        if (extraPoints !== undefined) {\n            this.addPoints(extraPoints);\n        }\n    }\n\n    getCompetitionSport(): CompetitionSport {\n        return this.competitionSport;\n    }\n}\n","import { Round } from '../../qualify/group';\nimport { Place } from '../../place';\n\nimport { ScoreConfigService } from '../../score/config/service';\nimport { CompetitionSport } from '../../competition/sport';\nimport { TogetherGame } from '../../game/together';\nimport { AgainstGame } from '../../game/against';\nimport { PlaceSportPerformance } from '../sportPerformance';\n\nexport abstract class PlaceSportPerformanceCalculator {\n    protected scoreConfigService: ScoreConfigService;\n\n    constructor(\n        protected round: Round,\n        protected competitionSport: CompetitionSport\n    ) {\n        this.scoreConfigService = new ScoreConfigService();\n    }\n\n    /*static getIndex(place: Place): string {\n        return place.getPoule().getNumber() + '-' + place.getNumber();\n    }*/\n\n    protected getFilteredGames(games: (AgainstGame | TogetherGame)[]): (AgainstGame | TogetherGame)[] {\n        return games.filter((game: AgainstGame | TogetherGame) => this.competitionSport === game.getCompetitionSport());\n    }\n\n    protected createPerformances(places: Place[]): PlaceSportPerformance[] {\n        return places.map((place: Place): PlaceSportPerformance => {\n            return new PlaceSportPerformance(place, this.competitionSport, place.getExtraPoints());\n        });\n    }\n\n    protected getPerformanceMap(performances: PlaceSportPerformance[]): PlaceSportPerformanceMap {\n        const map: PlaceSportPerformanceMap = {};\n        performances.forEach((performance: PlaceSportPerformance) => map[performance.getPlaceLocation().getRoundLocationId()] = performance);\n        return map;\n    }\n}\n\nexport interface PlaceSportPerformanceMap {\n    [key: string]: PlaceSportPerformance;\n}\n","\nimport { AgainstScoreHelper } from '../../../score/againstHelper';\nimport { AgainstScore } from '../../../score/against';\nimport { PlaceSportPerformanceCalculator } from '../calculator';\nimport { AgainstGame } from '../../../game/against';\nimport { Round } from '../../../qualify/group';\nimport { Place } from '../../../place';\nimport { Game } from '../../../game';\nimport { AgainstSide } from '../../../against/side';\nimport { AgainstGamePlace } from '../../../game/place/against';\nimport { AgainstResult } from '../../../against/result';\nimport { CompetitionSport } from '../../../competition/sport';\nimport { PlaceSportPerformance } from '../../sportPerformance';\nimport { GamePhase } from '../../../game/phase';\nimport { PointsCalculation } from '../../../ranking/pointsCalculation';\n\nexport class PlaceAgainstSportPerformanceCalculator extends PlaceSportPerformanceCalculator {\n\n    constructor(round: Round, competitionSport: CompetitionSport) {\n        super(round, competitionSport);\n    }\n\n    getPerformances(places: Place[], games: AgainstGame[]): PlaceSportPerformance[] {\n        const performances = this.createPerformances(places);\n        const performanceMap = this.getPerformanceMap(performances);\n        const useSubScore = this.round.getValidScoreConfig(this.competitionSport).useSubScore();\n        (<AgainstGame[]>this.getFilteredGames(games)).forEach((game: AgainstGame) => {\n            const finalScore = this.scoreConfigService.getFinalAgainstScore(game, useSubScore);\n            if (!finalScore) {\n                return;\n            }\n            let finalSubScore: AgainstScoreHelper | undefined;\n            if (useSubScore) {\n                finalSubScore = this.scoreConfigService.getFinalAgainstSubScore(game);\n            }\n            [AgainstSide.Home, AgainstSide.Away].forEach((side: AgainstSide) => {\n                const points = this.getNrOfPoints(finalScore, side, game);\n                const scored = this.getNrOfUnits(finalScore, side, AgainstScore.SCORED);\n                const received = this.getNrOfUnits(finalScore, side, AgainstScore.RECEIVED);\n                let subScored = 0;\n                let subReceived = 0;\n                if (finalSubScore) {\n                    subScored = this.getNrOfUnits(finalSubScore, side, AgainstScore.SCORED);\n                    subReceived = this.getNrOfUnits(finalSubScore, side, AgainstScore.RECEIVED);\n                }\n                game.getSidePlaces(side).forEach((gamePlace: AgainstGamePlace) => {\n                    const performance = performanceMap[gamePlace.getPlace().getRoundLocationId()];\n                    if (performance === undefined) {\n                        return;\n                    }\n                    performance.addGames(1);\n                    performance.addPoints(points);\n                    performance.addScored(scored);\n                    performance.addReceived(received);\n                    performance.addSubScored(subScored);\n                    performance.addSubReceived(subReceived);\n                });\n            });\n        });\n        return performances;\n    }\n\n    private getNrOfPoints(finalScore: AgainstScoreHelper, side: AgainstSide, game: AgainstGame): number {\n        if (finalScore === undefined) {\n            return 0;\n        }\n        let points = 0;\n\n        const againstQualifyConfig = game.getAgainstQualifyConfig();\n        if (againstQualifyConfig.getPointsCalculation() === PointsCalculation.AgainstGamePoints\n            || againstQualifyConfig.getPointsCalculation() === PointsCalculation.Both) {\n\n            if (finalScore.getResult(side) === AgainstResult.Win) {\n                if (game.getFinalPhase() === GamePhase.RegularTime) {\n                    points += againstQualifyConfig.getWinPoints();\n                } else if (game.getFinalPhase() === GamePhase.ExtraTime) {\n                    points += againstQualifyConfig.getWinPointsExt();\n                }\n            } else if (finalScore.getResult(side) === AgainstResult.Draw) {\n                if (game.getFinalPhase() === GamePhase.RegularTime) {\n                    points += againstQualifyConfig.getDrawPoints();\n                } else if (game.getFinalPhase() === GamePhase.ExtraTime) {\n                    points += againstQualifyConfig.getDrawPointsExt();\n                }\n            } else if (game.getFinalPhase() === GamePhase.ExtraTime) {\n                points += againstQualifyConfig.getLosePointsExt();\n            }\n            points += (side === AgainstSide.Home ? game.getHomeExtraPoints() : game.getAwayExtraPoints());\n        }\n        if (againstQualifyConfig.getPointsCalculation() === PointsCalculation.Scores\n            || againstQualifyConfig.getPointsCalculation() === PointsCalculation.Both) {\n\n            points += finalScore.get(side);\n        }\n        return points;\n    }\n\n    private getNrOfUnits(finalScore: AgainstScoreHelper, side: AgainstSide, scoredReceived: number): number {\n        if (finalScore === undefined) {\n            return 0;\n        }\n        const opposite = side === AgainstSide.Home ? AgainstSide.Away : AgainstSide.Home;\n        return this.getGameScorePart(finalScore, scoredReceived === AgainstScore.SCORED ? side : opposite);\n    }\n\n    private getGameScorePart(againstScore: AgainstScoreHelper, side: AgainstSide): number {\n        return side === AgainstSide.Home ? againstScore.getHome() : againstScore.getAway();\n    }\n}\n","import { PlaceSportPerformance } from \"../place/sportPerformance\";\nimport { RankingRule } from \"./rule\";\n\nexport class RankingFunctionMapCreator {\n    protected map: RankFunctionMap = {};\n\n    constructor(\n    ) {\n        this.initMap();\n    }\n\n    getMap(): RankFunctionMap {\n        return this.map;\n    }\n\n    private initMap() {\n        this.map[RankingRule.MostPoints] = (performances: PlaceSportPerformance[]): PlaceSportPerformance[] => {\n            let mostPoints: number | undefined;\n            let bestPerformances: PlaceSportPerformance[] = [];\n            performances.forEach((performance: PlaceSportPerformance) => {\n                const points = performance.getPoints();\n                if (mostPoints === undefined || points === mostPoints) {\n                    mostPoints = points;\n                    bestPerformances.push(performance);\n                } else if (points > mostPoints) {\n                    mostPoints = points;\n                    bestPerformances = [performance];\n                }\n            });\n            return bestPerformances;\n        };\n        this.map[RankingRule.FewestGames] = (performances: PlaceSportPerformance[]): PlaceSportPerformance[] => {\n            let fewestGames: number | undefined;\n            let bestPerformances: PlaceSportPerformance[] = [];\n            performances.forEach((performance: PlaceSportPerformance) => {\n                const nrOfGames = performance.getGames();\n                if (fewestGames === undefined || nrOfGames === fewestGames) {\n                    fewestGames = nrOfGames;\n                    bestPerformances.push(performance);\n                } else if (nrOfGames < fewestGames) {\n                    fewestGames = nrOfGames;\n                    bestPerformances = [performance];\n                }\n            });\n            return bestPerformances;\n        };\n        this.map[RankingRule.MostUnitsScored] = (performances: PlaceSportPerformance[]): PlaceSportPerformance[] => {\n            return this.getMostScored(performances, false);\n        }\n        this.map[RankingRule.MostSubUnitsScored] = (performances: PlaceSportPerformance[]): PlaceSportPerformance[] => {\n            return this.getMostScored(performances, true);\n        }\n    }\n\n    protected getMostScored = (performances: PlaceSportPerformance[], sub: boolean): PlaceSportPerformance[] => {\n        let mostScored: number | undefined;\n        let bestPerformances: PlaceSportPerformance[] = [];\n        performances.forEach((performance: PlaceSportPerformance) => {\n            const scored = sub ? performance.getSubScored() : performance.getScored();\n            if (mostScored === undefined || scored === mostScored) {\n                mostScored = scored;\n                bestPerformances.push(performance);\n            } else if (scored > mostScored) {\n                mostScored = scored;\n                bestPerformances = [performance];\n            }\n        });\n        return bestPerformances;\n    }\n}\n\nexport interface RankFunctionMap {\n    [key: number]: Function;\n}\n","import { PlaceLocation } from '../../../place/location';\nimport { CompetitionSport } from '../../../competition/sport';\nimport { PlaceSportPerformance } from '../../../place/sportPerformance';\n\nexport class SportRoundRankingItem {\n    constructor(private performance: PlaceSportPerformance, private uniqueRank: number, private rank: number\n    ) {\n    }\n\n    getUniqueRank(): number {\n        return this.uniqueRank;\n    }\n\n    getRank(): number {\n        return this.rank;\n    }\n\n    getCompetitionSport(): CompetitionSport {\n        return this.performance.getCompetitionSport();\n    }\n\n    getPlaceLocation(): PlaceLocation {\n        return this.performance.getPlaceLocation();\n    }\n\n    getPerformance(): PlaceSportPerformance {\n        return this.performance;\n    }\n\n\n}\n\n","import { CompetitionSport } from \"../../../competition/sport\";\nimport { PlaceSportPerformance } from \"../../../place/sportPerformance\";\nimport { Poule } from \"../../../poule\";\nimport { Round } from \"../../../qualify/group\";\nimport { SportRoundRankingItem } from \"../../item/round/sport\";\nimport { RankingRule } from \"../../rule\";\nimport { RankingRuleGetter } from \"../../rule/getter\";\nimport { AgainstRuleSet } from \"../../againstRuleSet\";\nimport { GameState } from \"../../../game/state\";\nimport { AgainstVariant } from \"../../../sport/variant/against\";\n\nexport abstract class SportRoundRankingCalculator {\n    protected gameStateMap: GameStateMap = {};\n    protected rankFunctionMap: RankFunctionMap = {};\n    protected rankingRuleGetter: RankingRuleGetter;\n\n    constructor(\n        protected competitionSport: CompetitionSport,\n        gameStates: GameState[]\n    ) {\n        gameStates.forEach((state: GameState) => this.gameStateMap[state] = true);\n        this.rankingRuleGetter = new RankingRuleGetter();\n    }\n\n    abstract getItemsForPoule(poule: Poule): SportRoundRankingItem[];\n\n    protected getRankingRuleSet(): AgainstRuleSet | undefined {\n        if (this.competitionSport.getVariant() instanceof AgainstVariant) {\n            return this.competitionSport.getCompetition().getAgainstRuleSet();\n        }\n        return undefined;\n    }\n\n    protected rankItems(performances: PlaceSportPerformance[], rankingRules: RankingRule[]): SportRoundRankingItem[] {\n        const rankingItems: SportRoundRankingItem[] = [];\n        let nrOfIterations = 0;\n        while (performances.length > 0) {\n            const bestPerformances: PlaceSportPerformance[] = this.findBestPerformances(performances, rankingRules);\n            const rank = nrOfIterations + 1;\n            bestPerformances.sort((perfA: PlaceSportPerformance, perfB: PlaceSportPerformance) => {\n                if (perfA.getPlaceLocation().getPouleNr() === perfA.getPlaceLocation().getPouleNr()) {\n                    return perfA.getPlaceLocation().getPlaceNr() - perfA.getPlaceLocation().getPlaceNr();\n                }\n                return perfA.getPlaceLocation().getPouleNr() - perfA.getPlaceLocation().getPouleNr();\n            });\n            bestPerformances.forEach((bestPerformance: PlaceSportPerformance) => {\n                performances.splice(performances.indexOf(bestPerformance), 1);\n                rankingItems.push(new SportRoundRankingItem(bestPerformance, ++nrOfIterations, rank));\n            });\n        }\n        return rankingItems;\n    }\n\n    protected getItemsHelper(round: Round, performances: PlaceSportPerformance[]): SportRoundRankingItem[] {\n        const scoreConfig = round.getValidScoreConfig(this.competitionSport);\n        const ruleSet = this.getRankingRuleSet();\n        const rankingRules: RankingRule[] = this.rankingRuleGetter.getRules(ruleSet, scoreConfig.useSubScore());\n        return this.rankItems(performances, rankingRules);\n    }\n\n    protected getItemByRank(rankingItems: SportRoundRankingItem[], rank: number): SportRoundRankingItem | undefined {\n        return rankingItems.find(rankingItemIt => rankingItemIt.getUniqueRank() === rank);\n    }\n\n    protected findBestPerformances(originalPerformances: PlaceSportPerformance[], rankingRules: RankingRule[]): PlaceSportPerformance[] {\n        let bestPerformances: PlaceSportPerformance[] = originalPerformances.slice();\n        rankingRules.some((rankingRule: RankingRule) => {\n            const rankingFunction = this.rankFunctionMap[rankingRule];\n            if (rankingRule === RankingRule.BestAmongEachOther && originalPerformances.length === bestPerformances.length) {\n                return false;\n            }\n            bestPerformances = rankingFunction(bestPerformances);\n            return (bestPerformances.length < 2);\n        });\n        return bestPerformances;\n    }\n}\n\ninterface GameStateMap {\n    [key: number]: boolean;\n}\n\nexport interface RankFunctionMap {\n    [key: number]: Function;\n}\n","\nimport { AgainstSide } from '../../../../against/side';\nimport { CompetitionSport } from '../../../../competition/sport';\nimport { AgainstGame } from '../../../../game/against';\nimport { GameState } from '../../../../game/state';\nimport { Place } from '../../../../place';\nimport { PlaceSportPerformance } from '../../../../place/sportPerformance';\nimport { PlaceSportPerformanceMap } from '../../../../place/sportPerformance/calculator';\nimport { PlaceAgainstSportPerformanceCalculator } from '../../../../place/sportPerformance/calculator/against';\nimport { Poule } from '../../../../poule';\nimport { Round } from '../../../../qualify/group';\nimport { RankingFunctionMapCreator } from '../../../functionMapCreator';\nimport { SportRoundRankingItem } from '../../../item/round/sport';\nimport { RankingRule } from '../../../rule';\nimport { SportRoundRankingCalculator } from '../sport';\n\nexport class AgainstSportRoundRankingCalculator extends SportRoundRankingCalculator {\n\n    constructor(competitionSport: CompetitionSport, gameStates?: GameState[]) {\n        super(competitionSport, gameStates ?? [GameState.Finished]);\n        const functionMapCreator = new AgainstRankingFunctionMapCreator(competitionSport, gameStates ?? [GameState.Finished]);\n        this.rankFunctionMap = functionMapCreator.getMap();\n    }\n\n    getItemsForPoule(poule: Poule): SportRoundRankingItem[] {\n        return this.getItems(poule.getRound(), poule.getPlaces(), poule.getAgainstGames());\n    }\n\n    getItemsAmongPlaces(poule: Poule, places: Place[]): SportRoundRankingItem[] {\n        const games = this.getGamesAmongEachOther(places, poule.getAgainstGames());\n        return this.getItems(poule.getRound(), places, games);\n    }\n\n    protected getItems(round: Round, places: Place[], games: AgainstGame[]): SportRoundRankingItem[] {\n        const calculator = new PlaceAgainstSportPerformanceCalculator(round, this.competitionSport);\n        const performances: PlaceSportPerformance[] = calculator.getPerformances(places, this.getFilteredGames(games));\n        return this.getItemsHelper(round, performances);\n    }\n\n    protected getFilteredGames(games: AgainstGame[]): AgainstGame[] {\n        return games.filter((game: AgainstGame) => this.gameStateMap[game.getState()] !== undefined);\n    }\n\n    private getGamesAmongEachOther = (places: Place[], games: AgainstGame[]): AgainstGame[] => {\n        const gamesRet: AgainstGame[] = [];\n        games.forEach((game: AgainstGame) => {\n            const inHome = places.some((place: Place) => game.isParticipating(place, AgainstSide.Home));\n            const inAway = places.some((place: Place) => game.isParticipating(place, AgainstSide.Away));\n            if (inHome && inAway) {\n                gamesRet.push(game);\n            }\n        });\n        return gamesRet;\n    }\n}\n\nexport class AgainstRankingFunctionMapCreator extends RankingFunctionMapCreator {\n\n    constructor(private competitionSport: CompetitionSport, private gameStates: GameState[]) {\n        super();\n        this.myInitMap();\n    }\n\n    private myInitMap() {\n        this.map[RankingRule.BestUnitDifference] = (performances: PlaceSportPerformance[]): PlaceSportPerformance[] => {\n            return this.getBestDifference(performances, false);\n        };\n        this.map[RankingRule.BestSubUnitDifference] = (performances: PlaceSportPerformance[]): PlaceSportPerformance[] => {\n            return this.getBestDifference(performances, true);\n        }\n        this.map[RankingRule.FewestGames] = (performances: PlaceSportPerformance[]): PlaceSportPerformance[] => {\n            let fewestGames: number | undefined;\n            let bestPerformances: PlaceSportPerformance[] = [];\n            performances.forEach((performance: PlaceSportPerformance) => {\n                const nrOfGames = performance.getGames();\n                if (fewestGames === undefined || nrOfGames === fewestGames) {\n                    fewestGames = nrOfGames;\n                    bestPerformances.push(performance);\n                } else if (nrOfGames < fewestGames) {\n                    fewestGames = nrOfGames;\n                    bestPerformances = [performance];\n                }\n            });\n            return bestPerformances;\n        };\n        this.map[RankingRule.BestAmongEachOther] = (performances: PlaceSportPerformance[]): PlaceSportPerformance[] => {\n            const places = performances.map((performances: PlaceSportPerformance) => performances.getPlace());\n            const poule = places[0].getPoule();\n            const rankingCalculator = new AgainstSportRoundRankingCalculator(this.competitionSport, this.gameStates);\n            const rankingItems = rankingCalculator.getItemsAmongPlaces(poule, places)\n                .filter((sportRankingItem: SportRoundRankingItem) => sportRankingItem.getRank() === 1);\n\n            if (rankingItems.length === performances.length) {\n                return performances;\n            }\n            const performanceMap = this.getPerformanceMap(performances);\n            return rankingItems.map((rankingItem: SportRoundRankingItem) => performanceMap[rankingItem.getPlaceLocation().getRoundLocationId()]);\n\n        }\n    }\n\n    private getPerformanceMap(performances: PlaceSportPerformance[]): PlaceSportPerformanceMap {\n        const map: PlaceSportPerformanceMap = {};\n        performances.forEach((performance: PlaceSportPerformance) => map[performance.getPlaceLocation().getRoundLocationId()] = performance);\n        return map;\n    }\n\n    private getBestDifference = (performances: PlaceSportPerformance[], sub: boolean): PlaceSportPerformance[] => {\n        let bestDiff: number | undefined;\n        let bestPerformances: PlaceSportPerformance[] = [];\n        performances.forEach((performance: PlaceSportPerformance) => {\n            const diff = sub ? performance.getSubDiff() : performance.getDiff();\n            if (bestDiff === undefined || diff === bestDiff) {\n                bestDiff = diff;\n                bestPerformances.push(performance);\n            } else if (diff > bestDiff) {\n                bestDiff = diff;\n                bestPerformances = [performance];\n            }\n        });\n        return bestPerformances;\n    }\n}","import { AgainstSide } from '../against/side';\nimport { Competitor } from '../competitor';\nimport { StartLocationMap } from '../competitor/startLocation/map';\nimport { GameState } from '../game/state';\nimport { Poule } from '../poule';\nimport { AgainstSportRoundRankingCalculator } from '../ranking/calculator/round/sport/against';\nimport { SportRoundRankingItem } from '../ranking/item/round/sport';\n\nexport class AgainstPoule {\n\n    public homeCompetitor: Competitor | undefined;\n    public awayCompetitor: Competitor | undefined;\n    private sportRankingItems: SportRoundRankingItem[];\n\n    constructor(private poule: Poule, private startLocationMap: StartLocationMap) {\n        const competitionSport = poule.getCompetition().getSingleSport();\n        const rankingCalculator = new AgainstSportRoundRankingCalculator(competitionSport, [GameState.Finished]);\n        this.sportRankingItems = rankingCalculator.getItemsForPoule(poule);\n\n        const homeStartLocation = this.poule.getPlace(1).getStartLocation();\n        if (homeStartLocation) {\n            this.homeCompetitor = this.startLocationMap.getCompetitor(homeStartLocation);\n        }\n        if (this.poule.getPlaces().length === 2) {\n            const awayStartLocation = this.poule.getPlace(2).getStartLocation();\n            if (awayStartLocation) {\n                this.awayCompetitor = this.startLocationMap.getCompetitor(awayStartLocation);\n            }\n        }\n    }\n    \n\n    public getCompetitor(side: AgainstSide): Competitor | undefined {\n        return side === AgainstSide.Home ? this.homeCompetitor : this.awayCompetitor;\n    }\n\n    hasRankingScore(): boolean {\n        return this.poule.getGamesState() === GameState.InProgress || this.poule.getGamesState() === GameState.Finished;\n    }\n\n    getScore(side: AgainstSide): string {\n        const sportRankingItem = this.getSportRankingItem(this.getCompetitor(side));\n        if (sportRankingItem === undefined) {\n            return '';\n        }\n        const performance = sportRankingItem.getPerformance();\n        if (performance === undefined) {\n            return '';\n        }\n        return '' + performance.getPoints();\n    }\n\n    public hasQualified(side: AgainstSide): boolean {\n        if (this.poule.getGamesState() !== GameState.Finished) {\n            return false;\n        }\n        const oppositeSide = side === AgainstSide.Home ? AgainstSide.Away : AgainstSide.Home\n\n        const sportRankingItem = this.getSportRankingItem(this.getCompetitor(side));\n        const opposite = this.getSportRankingItem(this.getCompetitor(oppositeSide));\n        if (sportRankingItem === undefined || opposite === undefined) {\n            return false;\n        }\n        return sportRankingItem.getUniqueRank() < opposite.getUniqueRank();\n    }\n\n    private getSportRankingItem(competitor: Competitor | undefined): SportRoundRankingItem | undefined {\n        if (competitor === undefined) {\n            return undefined;\n        }\n        return this.sportRankingItems.find((sportRankingItem: SportRoundRankingItem): boolean => {\n            const startLocation = sportRankingItem.getPerformance().getPlace().getStartLocation();\n            return startLocation !== undefined && competitor.getStartLocation().equals(startLocation);\n        });\n    }\n}\n","import { PlaceLocation } from '../place/location';\nimport { Poule } from '../poule';\nimport { Round } from './group';\n\nexport class QualifyReservationService {\n    private reservations: PouleNumberReservations[] = [];\n\n    constructor(childRound: Round) {\n        childRound.getPoules().forEach(poule => {\n            this.reservations.push({ toPouleNr: poule.getNumber(), fromPoules: [] });\n        });\n    }\n\n    isFree(toPouleNumber: number, fromPoule: Poule): boolean {\n        return !this.get(toPouleNumber)?.fromPoules.some(fromPouleIt => fromPouleIt === fromPoule);\n    }\n\n    reserve(toPouleNumber: number, fromPoule: Poule) {\n        this.get(toPouleNumber)?.fromPoules.push(fromPoule);\n    }\n\n    protected get(toPouleNumber: number): PouleNumberReservations | undefined {\n        return this.reservations.find(reservationIt => reservationIt.toPouleNr === toPouleNumber);\n    }\n\n    getFreeAndLeastAvailabe(toPouleNumber: number, fromRound: Round, fromPlaceLocations: PlaceLocation[]): PlaceLocation {\n        let retPlaceLocation: PlaceLocation | undefined;\n        let leastNrOfPoulesAvailable: number | undefined;\n        fromPlaceLocations.forEach(fromPlaceLocation => {\n            const fromPoule = fromRound.getPoule(fromPlaceLocation.getPouleNr());\n            if (!fromPoule || !this.isFree(toPouleNumber, fromPoule)) {\n                return;\n            }\n            const nrOfPoulesAvailable = this.getNrOfPoulesAvailable(fromPoule, toPouleNumber + 1);\n            if (leastNrOfPoulesAvailable === undefined || nrOfPoulesAvailable < leastNrOfPoulesAvailable) {\n                retPlaceLocation = fromPlaceLocation;\n                leastNrOfPoulesAvailable = nrOfPoulesAvailable;\n            }\n        });\n        if (retPlaceLocation === undefined) {\n            return fromPlaceLocations[0];\n        }\n        return retPlaceLocation;\n    }\n\n    protected getNrOfPoulesAvailable(fromPoule: Poule, toPouleNumber: number): number {\n        return this.reservations.filter(reservation => reservation.toPouleNr >= toPouleNumber\n            && this.isFree(reservation.toPouleNr, fromPoule)).length;\n    }\n}\n\ninterface PouleNumberReservations {\n    toPouleNr: number;\n    fromPoules: Poule[];\n}\n","import { CompetitionSport } from '../../competition/sport';\nimport { Place } from '../../place';\nimport { PlaceLocation } from '../../place/location';\nimport { PlacePerformance } from '../../place/performance';\nimport { Cumulative } from '../calculator/cumulative';\nimport { SportRoundRankingItem } from './round/sport';\n\nexport class RoundRankingItem {\n    private rank: number = 1;\n    private uniqueRank: number = 1;\n    private cumulativeRank: number = 0;\n    private sportItems: SportRoundRankingItem[] = [];\n    private cumulativePerformance: PlacePerformance;\n\n    constructor(protected place: Place) {\n        this.cumulativePerformance = new PlacePerformance(place);\n    }\n\n    getPlace(): Place {\n        return this.place;\n    }\n\n    getPlaceLocation(): PlaceLocation {\n        return this.place;\n    }\n\n    getCumulativeRank(): number {\n        return this.cumulativeRank;\n    }\n\n    getCumulativePerformance(): PlacePerformance {\n        return this.cumulativePerformance;\n    }\n\n    getUniqueRank(): number {\n        return this.uniqueRank;\n    }\n\n    getRank(): number {\n        return this.rank;\n    }\n\n    setRank(rank: number, uniqueRank: number) {\n        this.rank = rank;\n        this.uniqueRank = uniqueRank;\n    }\n\n    addSportRoundItem(item: SportRoundRankingItem) {\n        this.sportItems.push(item);\n        this.cumulativeRank += item.getRank();\n        this.cumulativePerformance.addSportPerformace(item.getPerformance());\n    }\n\n    getSportItem(competitionSport: CompetitionSport): SportRoundRankingItem {\n        const sportItem = this.sportItems.find((sportItemIt: SportRoundRankingItem) => sportItemIt.getCompetitionSport() === competitionSport);\n        if (!sportItem) {\n            throw new Error(\"sportItem could not be found\");\n        }\n        return sportItem;\n    }\n\n    compareCumulativePerformances(roundRankingItem: RoundRankingItem): number {\n        const otherPerformance = roundRankingItem.getCumulativePerformance();\n\n        const cmpPoints = otherPerformance.getPoints() - this.cumulativePerformance.getPoints();\n        if (cmpPoints !== 0) {\n            return cmpPoints;\n        }\n\n        const cmpGames = this.cumulativePerformance.getGames() - otherPerformance.getGames();\n        if (cmpGames !== 0) {\n            return cmpGames;\n        }\n\n        const cmpDiff = otherPerformance.getDiff() - this.cumulativePerformance.getDiff();\n        if (cmpDiff !== 0) {\n            return cmpDiff;\n        }\n\n        const cmpScored = otherPerformance.getScored() - this.cumulativePerformance.getScored();\n        if (cmpScored !== 0) {\n            return cmpScored;\n        }\n\n        const cmpReceived = this.cumulativePerformance.getReceived() - otherPerformance.getReceived();\n        if (cmpReceived !== 0) {\n            return cmpReceived;\n        }\n\n        const cmpSubDiff = otherPerformance.getSubDiff() - this.cumulativePerformance.getSubDiff();\n        if (cmpSubDiff !== 0) {\n            return cmpSubDiff;\n        }\n\n        const cmpSubScored = otherPerformance.getSubScored() - this.cumulativePerformance.getSubScored();\n        if (cmpSubScored !== 0) {\n            return cmpSubScored;\n        }\n\n        return this.cumulativePerformance.getSubReceived() - otherPerformance.getSubReceived();\n    }\n}\n","export enum Cumulative {\n    byPerformance = 1,\n    byRank\n}","\nimport { TogetherGame } from '../../../game/together';\nimport { Round } from '../../../qualify/group';\nimport { Place } from '../../../place';\nimport { TogetherGamePlace } from '../../../game/place/together';\nimport { CompetitionSport } from '../../../competition/sport';\nimport { PlaceSportPerformance } from '../../sportPerformance';\nimport { PlaceSportPerformanceCalculator } from '../calculator';\n\nexport class PlaceTogetherSportPerformanceCalculator extends PlaceSportPerformanceCalculator {\n\n    constructor(round: Round, competitionSport: CompetitionSport) {\n        super(round, competitionSport);\n    }\n\n    getPerformances(places: Place[], games: TogetherGame[]): PlaceSportPerformance[] {\n        const performances = this.createPerformances(places);\n        const performanceMap = this.getPerformanceMap(performances);\n        const useSubScore = this.round.getValidScoreConfig(this.competitionSport).useSubScore();\n        (<TogetherGame[]>this.getFilteredGames(games)).forEach((game: TogetherGame) => {\n            game.getTogetherPlaces().forEach((gamePlace: TogetherGamePlace) => {\n                const finalScore = this.scoreConfigService.getFinalTogetherScore(gamePlace, useSubScore);\n                if (!finalScore) {\n                    return;\n                }\n                const performance = performanceMap[gamePlace.getPlace().getRoundLocationId()];\n                if (performance === undefined) {\n                    return;\n                }\n                performance.addGames(1);\n                performance.addPoints(finalScore);\n                performance.addScored(finalScore);\n                if (useSubScore) {\n                    performance.addSubScored(this.scoreConfigService.getFinalTogetherSubScore(gamePlace));\n                }\n            });\n\n        });\n        return performances;\n    }\n}\n","import { CompetitionSport } from \"../../../../competition/sport\";\nimport { GameState } from \"../../../../game/state\";\nimport { TogetherGame } from \"../../../../game/together\";\nimport { Place } from \"../../../../place\";\nimport { PlaceSportPerformance } from \"../../../../place/sportPerformance\";\nimport { PlaceTogetherSportPerformanceCalculator } from \"../../../../place/sportPerformance/calculator/together\";\nimport { Poule } from \"../../../../poule\";\nimport { Round } from \"../../../../qualify/group\";\nimport { RankingFunctionMapCreator } from \"../../../functionMapCreator\";\nimport { SportRoundRankingItem } from \"../../../item/round/sport\";\nimport { SportRoundRankingCalculator } from \"../sport\";\n\nexport class TogetherSportRoundRankingCalculator extends SportRoundRankingCalculator {\n\n    constructor(competitionSport: CompetitionSport, gameStates?: GameState[]) {\n        super(competitionSport, gameStates ?? [GameState.Finished]);\n        const functionMapCreator = new RankingFunctionMapCreator();\n        this.rankFunctionMap = functionMapCreator.getMap();\n    }\n\n    getItemsForPoule(poule: Poule): SportRoundRankingItem[] {\n        return this.getItems(poule.getRound(), poule.getPlaces(), poule.getTogetherGames());\n    }\n\n    protected getItems(round: Round, places: Place[], games: TogetherGame[]): SportRoundRankingItem[] {\n        const calculator = new PlaceTogetherSportPerformanceCalculator(round, this.competitionSport);\n        const performances: PlaceSportPerformance[] = calculator.getPerformances(places, this.getFilteredGames(games));\n        return this.getItemsHelper(round, performances);\n    }\n\n    protected getFilteredGames(games: TogetherGame[]): TogetherGame[] {\n        return games.filter((game: TogetherGame) => this.gameStateMap[game.getState()] !== undefined);\n    }\n}","import { CompetitionSport } from \"../../competition/sport\";\nimport { GameState } from \"../../game/state\";\nimport { Place } from \"../../place\";\nimport { PlaceLocation } from \"../../place/location\";\nimport { Poule } from \"../../poule\";\nimport { HorizontalPoule } from \"../../poule/horizontal\";\nimport { HorizontalMultipleQualifyRule } from \"../../qualify/rule/horizontal/multiple\";\nimport { VerticalMultipleQualifyRule } from \"../../qualify/rule/vertical/multiple\";\nimport { VerticalSingleQualifyRule } from \"../../qualify/rule/vertical/single\";\nimport { QualifyTarget } from \"../../qualify/target\";\nimport { AgainstVariant } from \"../../sport/variant/against\";\nimport { RoundRankingItem } from \"../item/round\";\nimport { SportRoundRankingItem } from \"../item/round/sport\";\nimport { Cumulative } from \"./cumulative\";\nimport { SportRoundRankingCalculator } from \"./round/sport\";\nimport { AgainstSportRoundRankingCalculator } from \"./round/sport/against\";\nimport { TogetherSportRoundRankingCalculator } from \"./round/sport/together\";\n\nexport class RoundRankingCalculator {\n    protected gameStates: GameState[];\n    protected cumulative: Cumulative;\n\n    constructor(\n        gameStates?: GameState[],\n        cumulative?: Cumulative,\n    ) {\n        this.gameStates = gameStates ?? [GameState.Finished];\n        this.cumulative = cumulative ?? Cumulative.byRank;\n    }\n\n    protected getSportRoundRankingCalculator(competitionSport: CompetitionSport): SportRoundRankingCalculator {\n        if (competitionSport.getVariant() instanceof AgainstVariant) {\n            return new AgainstSportRoundRankingCalculator(competitionSport, this.gameStates);\n        }\n        return new TogetherSportRoundRankingCalculator(competitionSport, this.gameStates);\n    }\n\n    getPlacesForPoule(poule: Poule): Place[] {\n        return this.getItemsForPoule(poule).map((rankingItem: RoundRankingItem) => {\n            return rankingItem.getPlace();\n        });\n    }\n\n    getItemsForPoule(poule: Poule): RoundRankingItem[] {\n        return this.convertSportRoundRankingsToRoundItems(\n            poule.getPlaces(),\n            poule.getCompetition().getSports().map((competitionSport: CompetitionSport): SportRoundRankingItem[] => {\n                return this.getSportRoundRankingCalculator(competitionSport).getItemsForPoule(poule);\n            })\n        );\n    }\n\n    getPlacesForMultipleRule(multipleRule: HorizontalMultipleQualifyRule | VerticalMultipleQualifyRule | VerticalSingleQualifyRule): Place[] {\n        return this.getItemsForHorizontalPoule(multipleRule.getFromHorizontalPoule()).map((rankingItem: RoundRankingItem) => {\n            return rankingItem.getPlace();\n        });\n    }\n\n    getPlaceLocationsForRankedRule(rankedRule: HorizontalMultipleQualifyRule | VerticalMultipleQualifyRule | VerticalSingleQualifyRule): PlaceLocation[] {\n        return this.getPlacesForMultipleRule(rankedRule)\n    }\n\n    getPlacesForHorizontalPoule(horizontalPoule: HorizontalPoule): Place[] {\n        return this.getItemsForHorizontalPoule(horizontalPoule).map((rankingItem: RoundRankingItem) => {\n            return rankingItem.getPlace();\n        });\n    }\n\n    getItemsForHorizontalPoule(horizontalPoule: HorizontalPoule): RoundRankingItem[] {\n        const rankingItems: RoundRankingItem[] = [];\n        horizontalPoule.getPlaces().forEach((place: Place) => {\n            const pouleRankingItems: RoundRankingItem[] = this.getItemsForPoule(place.getPoule());\n            const rank = place.getPlaceNr();\n            const pouleRankingItem = this.getItemByRank(pouleRankingItems, rank);\n            if (pouleRankingItem === undefined) {\n                return;\n            }\n            rankingItems.push(pouleRankingItem);\n        });\n\n        const items = this.rankItems(rankingItems);\n        // if (horizontalPoule.getNumber() === 1 && horizontalPoule.getQualifyTarget() === QualifyTarget.Losers) {\n        //     items.forEach(item => {\n        //         if (item.getPlaceLocation() !== undefined) {\n        //             console.log('cumulativeRoundRankingItem ', item.getCumulativePerformance());\n        //         }\n        //     });            \n        // }\n        \n        return items;\n    }\n\n    getItemByRank(rankingItems: RoundRankingItem[], rank: number): RoundRankingItem | undefined {\n        return rankingItems.find(rankingItemIt => rankingItemIt.getUniqueRank() === rank);\n    }\n\n\n    protected convertSportRoundRankingsToRoundItems(places: Place[], sportRoundRankings: (SportRoundRankingItem[])[]): RoundRankingItem[] {\n        const map: RoundRankingItemMap = this.getRoundRankingItemMap(places, sportRoundRankings);\n        const roundRankingItems = places.map((place: Place): RoundRankingItem => map[place.getRoundLocationId()]);\n        return this.rankItems(roundRankingItems);\n    }\n\n    protected getRoundRankingItemMap(places: Place[], sportRoundRankings: (SportRoundRankingItem[])[]): RoundRankingItemMap {\n        const map: RoundRankingItemMap = {};\n        places.forEach((place: Place) => map[place.getRoundLocationId()] = new RoundRankingItem(place));\n        sportRoundRankings.forEach((sportRoundRanking: SportRoundRankingItem[]) => {\n            sportRoundRanking.forEach((sportRoundItem: SportRoundRankingItem) => {\n                map[sportRoundItem.getPlaceLocation().getRoundLocationId()].addSportRoundItem(sportRoundItem);\n            });\n        });\n        return map;\n    }\n\n    protected rankItems(cumulativeRoundRankingItems: RoundRankingItem[]): RoundRankingItem[] {\n        cumulativeRoundRankingItems.sort((a: RoundRankingItem, b: RoundRankingItem) => {\n            return this.compareBy(a, b);\n        });\n        const roundRankingItems: RoundRankingItem[] = [];\n        let nrOfIterations = 0;\n        let rank = 0;\n        let previousCumulativeRankItem: RoundRankingItem | undefined;\n        let cumulativeRoundRankingItem: RoundRankingItem | undefined;\n        while (cumulativeRoundRankingItem = cumulativeRoundRankingItems.shift()) {\n            if (this.differs(cumulativeRoundRankingItem, previousCumulativeRankItem)) {\n                rank++;\n            }\n            cumulativeRoundRankingItem.setRank(rank, ++nrOfIterations);\n            previousCumulativeRankItem = cumulativeRoundRankingItem;\n            roundRankingItems.push(cumulativeRoundRankingItem);\n        }\n        return roundRankingItems;\n    }\n\n    protected compareBy(a: RoundRankingItem, b: RoundRankingItem): number {\n        if (this.cumulative === Cumulative.byRank\n            && a.getCumulativeRank() !== b.getCumulativeRank()) {\n            return a.getCumulativeRank() < b.getCumulativeRank() ? -1 : 1;\n        }\n        const cmp = a.compareCumulativePerformances(b);\n        if (cmp !== 0.0) {\n            return cmp > 0 ? 1 : -1;\n        }\n        if (a.getPlace().getPouleNr() === b.getPlace().getPouleNr()) {\n            return a.getPlace().getPlaceNr() - b.getPlace().getPlaceNr();\n        }\n        return a.getPlace().getPouleNr() - b.getPlace().getPouleNr();\n    }\n\n    protected differs(a: RoundRankingItem, b: RoundRankingItem | undefined): boolean {\n        if (b === undefined) {\n            return true;\n        }\n        if (this.cumulative === Cumulative.byRank && a.getCumulativeRank() !== b.getCumulativeRank()) {\n            return true;\n        }\n        return a.compareCumulativePerformances(b) !== 0.0;\n    }\n}\n\nexport interface RoundRankingItemMap {\n    [key: string]: RoundRankingItem;\n}","import { Competitor } from '../competitor';\nimport { PlaceLocation } from '../place/location';\nimport { Poule } from '../poule';\nimport { Place } from '../place';\nimport { QualifyGroup, Round } from './group';\nimport { QualifyReservationService } from './reservationservice';\nimport { RoundRankingCalculator } from '../ranking/calculator/round';\nimport { QualifyTarget } from './target';\nimport { RoundRankingItem } from '../ranking/item/round';\nimport { GameState } from '../game/state';\nimport { QualifyDistribution } from './distribution';\nimport { HorizontalSingleQualifyRule } from './rule/horizontal/single';\nimport { HorizontalMultipleQualifyRule } from './rule/horizontal/multiple';\nimport { VerticalSingleQualifyRule } from './rule/vertical/single';\nimport { VerticalMultipleQualifyRule } from './rule/vertical/multiple';\nimport { QualifyMappingByRank } from './mapping/byRank';\nimport { QualifyMappingByPlace } from './mapping/byPlace';\n\nexport class QualifyService {\n    private roundRankingCalculator: RoundRankingCalculator;\n    private poulesFinished: FinishedPoulesMap = {};\n    private roundFinished: boolean | undefined;\n\n    constructor(private round: Round) {\n        this.roundRankingCalculator = new RoundRankingCalculator();\n    }\n\n    setQualifiers(filterPoule?: Poule): Place[] {\n        let changedPlaces: Place[] = [];\n\n        const setQualifiersForSingleRule = (singleRule: HorizontalSingleQualifyRule, reservationService: QualifyReservationService) => {\n            singleRule.getMappings().forEach((qualifyPlaceMapping: QualifyMappingByPlace) => {\n                const fromPlace = qualifyPlaceMapping.getFromPlace();\n                if (filterPoule !== undefined && fromPlace.getPoule() !== filterPoule) {\n                    return;\n                }\n                this.setQualifierForPlaceMappingAndReserve(singleRule.getRank(), qualifyPlaceMapping, reservationService);\n                changedPlaces.push(qualifyPlaceMapping.getToPlace());\n            });\n        };\n        this.round.getQualifyGroups().forEach((qualifyGroup: QualifyGroup) => {\n            const reservationService = new QualifyReservationService(qualifyGroup.getChildRound());\n            \n                \n            let singleRule = qualifyGroup.getFirstSingleRule();\n            while (singleRule !== undefined) {\n                if (singleRule instanceof HorizontalSingleQualifyRule) {\n                    setQualifiersForSingleRule(singleRule, reservationService);\n                } else {\n                    changedPlaces = changedPlaces.concat(\n                        this.setQualifiersForRankedRuleAndReserve(singleRule,reservationService)\n                        );\n                } \n                singleRule = singleRule.getNext();\n            }\n            const multipleRule = qualifyGroup.getMultipleRule();\n            if (multipleRule !== undefined) {\n                const changedPlacesTmp = this.setQualifiersForRankedRuleAndReserve(multipleRule, reservationService);                \n                changedPlaces = changedPlaces.concat(changedPlacesTmp);\n            }\n           \n            \n        });\n        return changedPlaces;\n    }\n\n    protected setQualifierForPlaceMappingAndReserve(\n        rank: number,\n        qualifyMapping: QualifyMappingByPlace,\n        reservationService: QualifyReservationService): void {\n        \n        const poule = qualifyMapping.getFromPoule();       \n\n        const qualifiedPlace = this.getQualifiedPlace(poule, rank);\n        qualifyMapping.getToPlace().setQualifiedPlace(qualifiedPlace);\n        reservationService.reserve(qualifyMapping.getToPlace().getPoule().getNumber(), poule);\n    }\n\n    protected setQualifiersForRankedRuleAndReserve(rankedRule: HorizontalMultipleQualifyRule | VerticalMultipleQualifyRule | VerticalSingleQualifyRule, reservationService: QualifyReservationService): Place[] {\n        const changedPlaces: Place[] = [];\n        const toPlaces = rankedRule.getToPlaces();\n        \n        if (!this.isRoundFinished()) {\n            toPlaces.forEach((toPlace: Place) => {\n                toPlace.setQualifiedPlace(undefined);\n                changedPlaces.push(toPlace);\n            });\n            return changedPlaces;\n        }\n        const round = rankedRule.getFromRound();\n        const rankedPlaceLocations: PlaceLocation[] =\n            this.roundRankingCalculator.getPlaceLocationsForRankedRule(rankedRule);\n\n        if (rankedRule.getQualifyTarget() === QualifyTarget.Losers ) {\n            rankedPlaceLocations.reverse();\n        }\n\n        while (rankedPlaceLocations.length > toPlaces.length) {\n            rankedPlaceLocations.pop();\n        }\n\n        toPlaces.forEach((toPlace: Place) => {\n            const toPouleNumber = toPlace.getPoule().getNumber();\n            const rankingPlaceLocation = reservationService.getFreeAndLeastAvailabe(toPouleNumber, round, rankedPlaceLocations);\n            toPlace.setQualifiedPlace(round.getPlace(rankingPlaceLocation));\n\n            // if( rankedRule instanceof VerticalMultipleQualifyRule ) {\n            //     if (rankedRule.getQualifyTarget() === QualifyTarget.Losers) {\n            //         console.log('rankingPlaceLocation ', rankingPlaceLocation.getPouleNr() + '.' + rankingPlaceLocation.getPlaceNr());\n            //         console.log('toPlace ', toPlace.getPouleNr() + '.' + toPlace.getPlaceNr());\n            //     }\n            // }\n\n            changedPlaces.push(toPlace);\n            const index = rankedPlaceLocations.indexOf(rankingPlaceLocation);\n            if (index >= 0 ) {\n                rankedPlaceLocations.splice(index, 1);\n            }\n        });\n        return changedPlaces;\n    }\n\n    protected getQualifiedPlace(poule: Poule, rank: number): Place | undefined {\n        if (!this.isPouleFinished(poule)) {\n            return undefined;\n        }\n        const pouleRankingItems: RoundRankingItem[] = this.roundRankingCalculator.getItemsForPoule(poule);\n        const rankingItem = this.roundRankingCalculator.getItemByRank(pouleRankingItems, rank);\n        return rankingItem ? poule.getPlace(rankingItem.getPlaceLocation().getPlaceNr()) : undefined;\n    }\n\n    protected isRoundFinished(): boolean {\n        if (this.roundFinished === undefined) {\n            this.roundFinished = this.round.getPoules().every(poule => this.isPouleFinished(poule));\n        }\n        return this.roundFinished;\n    }\n\n    protected isPouleFinished(poule: Poule): boolean {\n        if (this.poulesFinished[poule.getNumber()] === undefined) {\n            this.poulesFinished[poule.getNumber()] = (poule.getGamesState() === GameState.Finished);\n        }\n        return this.poulesFinished[poule.getNumber()];\n    }\n}\n\nexport interface NewQualifier {\n    competitor: Competitor;\n    place: Place;\n}\n\ninterface FinishedPoulesMap {\n    [key: number]: boolean;\n}","import { StartLocation } from '../../competitor/startLocation';\n\nexport class EndRankingItem {\n    constructor(private uniqueRank: number, private rank: number, private startLocation?: StartLocation | undefined) {\n    }\n\n    getUniqueRank(): number {\n        return this.uniqueRank;\n    }\n\n    getRank(): number {\n        return this.rank;\n    }\n\n    getStartLocation(): StartLocation | undefined {\n        return this.startLocation;\n    }\n}\n","\nimport { HorizontalPoule } from '../../poule/horizontal';\nimport { Round } from '../../qualify/group';\nimport { EndRankingItem } from '../item/end';\nimport { Place } from '../../place';\nimport { RoundRankingCalculator } from './round';\nimport { QualifyTarget } from '../../qualify/target';\nimport { HorizontalSingleQualifyRule } from '../../qualify/rule/horizontal/single';\nimport { GameState } from '../../game/state';\nimport { Category } from '../../category';\nimport { VerticalSingleQualifyRule } from '../../qualify/rule/vertical/single';\nimport { VerticalMultipleQualifyRule } from '../../qualify/rule/vertical/multiple';\nimport { HorizontalMultipleQualifyRule } from '../../qualify/rule/horizontal/multiple';\nimport { QualifyDistribution } from '../../qualify/distribution';\nimport { Poule } from '../../poule';\n\nexport class EndRankingCalculator {\n\n    private currentRank: number = 1;\n\n    constructor(private category: Category) {\n    }\n\n    getItems(): EndRankingItem[] {\n        this.currentRank = 1;\n        const getItems = (round: Round): EndRankingItem[] => {\n            let items: EndRankingItem[] = [];\n            round.getQualifyGroups(QualifyTarget.Winners).forEach(qualifyGroup => {\n                items = items.concat(getItems(qualifyGroup.getChildRound()));\n            });\n            if (round.getGamesState() === GameState.Finished) {\n                items = items.concat(this.getDropouts(round));\n            } else {\n                items = items.concat(this.getDropoutsNotFinished(round));\n            }\n            round.getQualifyGroups(QualifyTarget.Losers).slice().reverse().forEach(qualifyGroup => {\n                items = items.concat(getItems(qualifyGroup.getChildRound()));\n            });\n            return items;\n        };\n        const items = getItems(this.category.getRootRound());\n        return items.sort((itemA: EndRankingItem, itemB: EndRankingItem): number => {\n            return itemA.getUniqueRank() - itemB.getUniqueRank();\n        });\n    }\n\n    protected getDropoutsNotFinished(round: Round): EndRankingItem[] {\n        const items: EndRankingItem[] = [];\n        const nrOfDropouts: number = round.getNrOfPlaces() - round.getNrOfPlacesChildren();\n        for (let i = 0; i < nrOfDropouts; i++) {\n            items.push(new EndRankingItem(this.currentRank, this.currentRank++, undefined));\n        }\n        return items;\n    }\n\n    protected getDropouts(round: Round): EndRankingItem[] {\n        let dropouts: EndRankingItem[] = [];\n        const nrOfDropouts = round.getNrOfDropoutPlaces();\n        while (nrOfDropouts.amount > 0) {\n\n            const distribution = round.getParentQualifyGroup()?.getDistribution() ?? QualifyDistribution.HorizontalSnake;\n            if (distribution === QualifyDistribution.HorizontalSnake ) {\n                round.getHorizontalPoules(QualifyTarget.Winners).every(horPoule => {\n                    const horPouleDropouts = this.getHorizontalPouleDropouts(horPoule, nrOfDropouts);\n                    dropouts = dropouts.concat(horPouleDropouts);\n                    return nrOfDropouts.amount > 0;\n                });\n            } else {\n                const roundDropouts = this.getPoulesDropouts(round, nrOfDropouts);\n                dropouts = dropouts.concat(roundDropouts);\n            }\n        }\n\n        return dropouts;\n    }\n\n    protected getHorizontalPouleDropouts(horizontalPoule: HorizontalPoule, nrOfDropouts: NrOfDropOuts): EndRankingItem[] {\n        let dropOutPlaces = [];\n        const rankingCalculator = new RoundRankingCalculator();\n        const rankedPlaces: Place[] = rankingCalculator.getPlacesForHorizontalPoule(horizontalPoule);\n        let nrOfQualifiers = this.getHorizontalPouleNrOfQualifiers(horizontalPoule);\n        rankedPlaces.splice(0, nrOfQualifiers);        \n        while (nrOfDropouts.amount > 0 && rankedPlaces.length > 0) {\n            dropOutPlaces.push( rankedPlaces.shift() );\n            nrOfDropouts.amount--;\n        }\n\n        return dropOutPlaces.map((dropOutPlace: Place) => {\n            return new EndRankingItem(this.currentRank, this.currentRank++, dropOutPlace.getStartLocation());\n        });\n    }\n\n    getHorizontalPouleNrOfQualifiers(horizontalPoule: HorizontalPoule): number {\n        const qualifyRule = horizontalPoule.getQualifyRuleNew();\n        if (qualifyRule === undefined) {\n            return 0;\n        }\n        if (qualifyRule instanceof HorizontalSingleQualifyRule || qualifyRule instanceof VerticalSingleQualifyRule) {\n            return qualifyRule.getMappings().length;\n        } // else if (qualifyRule instanceof HorizontalMultipleQualifyRule) {\n        return qualifyRule.getNrOfToPlaces(); \n        // } \n        // throw new Error('non-horizontalQualifyRule not supported');\n    }\n\n    protected getPoulesDropouts(round: Round, nrOfDropouts: NrOfDropOuts): EndRankingItem[] {\n        let dropOutPlaces = [];\n        let nrOfDropoutPlaces = round.getNrOfDropoutPlaces();        \n        const nrOfWinners = round.getNrOfPlacesChildren(QualifyTarget.Winners);\n        const roundRankingCalculator = new RoundRankingCalculator();\n        \n        let rankedPlaces: Place[] = [];\n        const poules = round.getPoules();\n        poules.forEach((poule: Poule) => rankedPlaces = rankedPlaces.concat(roundRankingCalculator.getPlacesForPoule(poule)));\n\n        rankedPlaces.splice(0, nrOfWinners);\n        while (nrOfDropouts.amount > 0 && nrOfDropoutPlaces.amount > 0) {\n            const placeToAdd = rankedPlaces.shift();\n            if( placeToAdd !== undefined) {\n                dropOutPlaces.push(placeToAdd);\n            }\n            nrOfDropouts.amount--;\n            nrOfDropoutPlaces.amount--;\n        }\n        return dropOutPlaces.map((dropOutPlace: Place) => {\n            return new EndRankingItem(this.currentRank, this.currentRank++, dropOutPlace.getStartLocation());\n        });\n    }\n}\n\nexport interface NrOfDropOuts {\n    amount: number;\n}","import { Competition } from '../competition';\nimport { PlanningConfig } from '../planning/config';\nimport { Poule } from '../poule';\nimport { Round } from '../qualify/group';\nimport { GameAmountConfig } from '../planning/gameAmountConfig';\nimport { CompetitionSport } from '../competition/sport';\nimport { GameOrder } from '../game/order';\nimport { CategoryMap } from '../category/map';\nimport { StructureCell } from '../structure/cell';\nimport { PouleStructure } from '../poule/structure';\nimport { Category } from '../category';\nimport { GameGetter } from '../game/getter';\nimport { GameState } from '../game/state';\n\nexport class RoundNumber {\n    protected id: number = 0;\n    protected structureCellMap: Map<number, StructureCell> = new Map();\n    protected number: number;\n    protected next: RoundNumber | undefined;\n    protected planningConfig: PlanningConfig | undefined;\n    protected gameAmountConfigs: GameAmountConfig[] = [];\n\n    constructor(private competition: Competition, protected previous: RoundNumber | undefined) {\n        this.number = this.previous === undefined ? 1 : this.previous.getNumber() + 1;\n    }\n\n    getId(): number {\n        return this.id;\n    }\n\n    setId(id: number): void {\n        this.id = id;\n    }\n\n    getFirst(): RoundNumber {\n        const previous = this.getPrevious();\n        return previous ? previous.getFirst() : this;\n    }\n\n    isFirst(): boolean {\n        return (this.getPrevious() === undefined);\n    }\n\n    hasPrevious(): boolean {\n        return this.previous !== undefined;\n    }\n\n    getPrevious(): RoundNumber | undefined {\n        return this.previous;\n    }\n\n    detachFromPrevious(): void {\n        if (this.previous === undefined) {\n            return;\n        }\n        this.previous.removeNext();\n        this.previous = undefined;\n    }\n\n    hasNext(): boolean {\n        return this.next !== undefined;\n    }\n\n    getNext(): RoundNumber | undefined {\n        return this.next;\n    }\n\n    createNext(): RoundNumber {\n        this.next = new RoundNumber(this.getCompetition(), this);\n        return this.next;\n    }\n\n    detachFromNext() {\n        this.next = undefined;\n    }\n\n    removeNext() {\n        this.next = undefined;\n    }\n\n    getCompetition(): Competition {\n        return this.competition;\n    }\n\n    getNumber(): number {\n        return this.number;\n    }\n\n    getStructureCells(existingCategoryMap?: CategoryMap): StructureCell[] {\n        const structureCells = this.convertStructureCellMapToArray();\n        if (existingCategoryMap === undefined) {\n            return structureCells;\n        }\n        return structureCells.filter((cell: StructureCell) => existingCategoryMap.has(cell.getCategory().getNumber()));\n    }\n\n    private convertStructureCellMapToArray(): StructureCell[] {\n        return Array.from(this.structureCellMap.values());\n    }\n\n    getStructureCell(category: Category): StructureCell {\n        if (!this.structureCellMap.has(category.getNumber())) {\n            throw new Error('de structuurcel kan niet gevonden worden');\n        }\n        return this.structureCellMap.get(category.getNumber());\n    }\n\n    setStructureCell(structureCell: StructureCell): void {\n        this.structureCellMap.set(structureCell.getCategory().getNumber(), structureCell);\n    }\n\n    clearStructureCell(category: Category): void {\n        this.structureCellMap.delete(category.getNumber());\n    }\n\n    getRounds(categoryMap: CategoryMap | undefined): Round[] {\n        let rounds: Round[] = [];\n        this.getStructureCells(categoryMap).forEach((structureCell: StructureCell) => {\n            rounds = rounds.concat(structureCell.getRounds());\n        });\n        return rounds;\n    }\n\n    getPoules(categoryMap: CategoryMap): Poule[] {\n        let poules: Poule[] = [];\n        this.getRounds(categoryMap).forEach(round => {\n            poules = poules.concat(round.getPoules());\n        });\n        return poules;\n    }\n\n    createPouleStructure(): PouleStructure {\n        const pouleStructure = new PouleStructure();\n        this.getPoules(undefined).forEach(poule => pouleStructure.push(poule.getPlaces().length));\n        pouleStructure.sort((a: number, b: number) => { return b - a; });\n        return pouleStructure;\n    }\n\n    getValidPlanningConfig(): PlanningConfig {\n        const planningConfig = this.getPlanningConfig();\n        if (planningConfig !== undefined) {\n            return planningConfig;\n        }\n        const previous = this.getPrevious();\n        if (!previous) {\n            throw Error('het 1ste rondenummer moet gezet zijn');\n        }\n        return previous.getValidPlanningConfig();\n    }\n\n    hasBegun(): boolean {\n        return this.getStructureCells().some(structureCell => structureCell.hasBegun());\n    }\n\n    hasFinished(): boolean {\n        return this.getStructureCells().every(structureCell => structureCell.getGamesState() === GameState.Finished);\n    }\n\n    getCompetitionSports(): CompetitionSport[] {\n        return this.getCompetition().getSports();\n    }\n\n    setPlanningConfig(config: PlanningConfig | undefined) {\n        this.planningConfig = config;\n    }\n\n    getPlanningConfig(): PlanningConfig | undefined {\n        return this.planningConfig;\n    }\n\n    getGameAmountConfigs(): GameAmountConfig[] {\n        return this.gameAmountConfigs;\n    }\n\n    getGameAmountConfig(competitionSport: CompetitionSport): GameAmountConfig | undefined {\n        return this.gameAmountConfigs.find(gameAmountConfigIt => gameAmountConfigIt.getCompetitionSport() === competitionSport);\n    }\n\n    setGameAmountConfig(gameAmountConfig: GameAmountConfig) {\n        this.gameAmountConfigs.push(gameAmountConfig);\n    }\n\n    getValidGameAmountConfig(competitionSport: CompetitionSport): GameAmountConfig {\n        const gameAmountConfig = this.getGameAmountConfig(competitionSport);\n        if (gameAmountConfig !== undefined) {\n            return gameAmountConfig;\n        }\n        const previous = this.getPrevious();\n        if (!previous) {\n            throw Error('het 1ste rondenummer moet gezet zijn');\n        }\n        return previous.getValidGameAmountConfig(competitionSport);\n    }\n\n    // SHOW BE GOTTEN FROM STORAGE IN FUTURE, @TODO CDK\n    getFirstStartDateTime(): Date {\n        const games = (new GameGetter()).getGames(GameOrder.ByDate, this);\n        return games[0].getStartDateTime();\n    }\n\n    // SHOW BE GOTTEN FROM STORAGE IN FUTURE, @TODO CDK\n    getLastStartDateTime(): Date {\n        const games = (new GameGetter()).getGames(GameOrder.ByDate, this);\n        return games[games.length - 1].getStartDateTime();\n    }\n\n    getEndDateTime(): Date {\n        const nrOfMinutesToAdd = this.getValidPlanningConfig().getMinutesPerGame();\n        return new Date(this.getLastStartDateTime().getTime() + (nrOfMinutesToAdd * 60000));\n    }\n\n    detach() {\n        const next = this.getNext();\n        if (next !== undefined) {\n            next.detach();\n            this.detachFromNext();\n        }\n        this.detachFromPrevious();\n    }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Competition } from '../../competition';\nimport { PlanningConfigMapper } from '../../planning/config/mapper';\nimport { RoundNumber } from '../number';\nimport { JsonRoundNumber } from './json';\nimport { GameAmountConfigMapper } from '../../planning/gameAmountConfig/mapper';\nimport { StructureCell } from '../../structure/cell';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class RoundNumberMapper {\n    constructor(\n        private planningConfigMapper: PlanningConfigMapper,\n        private gameAmountConfigMapper: GameAmountConfigMapper\n    ) { }\n\n    toObject(json: JsonRoundNumber, competition: Competition, previousRoundNumber?: RoundNumber): RoundNumber {\n        const roundNumber = previousRoundNumber === undefined ? new RoundNumber(competition, undefined) : previousRoundNumber.createNext();\n        roundNumber.setId(json.id);\n\n        if (json.planningConfig !== undefined) {\n            this.planningConfigMapper.toObject(json.planningConfig, roundNumber);\n        }\n        if (json.gameAmountConfigs) {\n            json.gameAmountConfigs.forEach(jsonGameAmountConfig => {\n                this.gameAmountConfigMapper.toObject(jsonGameAmountConfig, roundNumber);\n            });\n        }\n        if (json.next !== undefined) {\n            this.toObject(json.next, competition, roundNumber);\n        }\n        return roundNumber;\n    }\n\n    toJson(roundNumber: RoundNumber): JsonRoundNumber {\n        const nextRoundNumber = roundNumber.getNext();\n        const planningConfig = roundNumber.getPlanningConfig();\n        return {\n            id: roundNumber.getId(),\n            number: roundNumber.getNumber(),\n            planningConfig: planningConfig ? this.planningConfigMapper.toJson(planningConfig) : undefined,\n            gameAmountConfigs: roundNumber.getGameAmountConfigs().map(config => this.gameAmountConfigMapper.toJson(config)),\n            next: nextRoundNumber ? this.toJson(nextRoundNumber) : undefined\n        };\n    }\n}\n","import { AgainstGpp } from \"./against/gamesPerPlace\";\nimport { AgainstH2h } from \"./against/h2h\";\nimport { AllInOneGame } from \"./allInOneGame\";\nimport { Single } from \"./single\";\n\nexport class SportWithFields {\n    constructor(protected variant: Single | AgainstH2h | AgainstGpp | AllInOneGame, protected nrOfFields: number) {\n        ;\n    }\n\n    getNrOfFields(): number {\n        return this.nrOfFields;\n    }\n\n    getVariant(): Single | AgainstH2h | AgainstGpp | AllInOneGame {\n        return this.variant;\n    }\n}","export class SportMath {\n    public above(top: number, bottom: number): number\n    {\n        const y = this.faculty(top);\n        const z = (this.faculty(top - bottom) * this.faculty(bottom));\n        return y / z;\n    }\n\n    public faculty(x: number): number\n    {\n        if (x > 1) {\n            return this.faculty(x - 1) * x;\n        }\n        return 1;\n    }\n}","import { SportMath } from \"../../../math\";\nimport { AgainstGpp } from \"../against/gamesPerPlace\";\n\nexport class AgainstGppWithPoule {\n    constructor(protected nrOfPlaces: number, protected againstGpp: AgainstGpp) {\n\n    }\n\n    public getTotalNrOfGames(): number\n    {\n        const totalNrOfGamePlaces = this.nrOfPlaces * this.againstGpp.getNrOfGamesPerPlace();\n        const totalNrOfGames = totalNrOfGamePlaces / this.againstGpp.getNrOfGamePlaces();\n        return Math.floor(totalNrOfGames);\n    }\n\n    public getNrOfPossibleAgainstCombinations(nrOfPlaces?: number|undefined): number\n    {\n        return nrOfPlaces === undefined ? this.nrOfPlaces : (new SportMath()).above(nrOfPlaces, 2);\n    }\n}","import { AgainstGpp } from \"../against/gamesPerPlace\";\nimport { AgainstGppWithPoule } from \"./againstGamePerPlace\";\n\nexport class EquallyAssignCalculator {\n\n    public assignAgainstSportsEqually(nrOfPlaces: number, againstGppVariants: AgainstGpp[]): boolean {\n\n        const againstGppsMap = new AgainstGppMap(againstGppVariants);\n        const againstGppsPerGamePlaces = Array.from(againstGppsMap.values());\n        return againstGppsPerGamePlaces.every((againstGpps: AgainstGpp[]): boolean => {\n            let totalNrOfGames = 0;\n            let uniqueNrOfCombinationsPerGame = undefined;\n            let nrOfPossibleCombinations = undefined;\n            againstGpps.forEach((againstGpp: AgainstGpp) => {\n                uniqueNrOfCombinationsPerGame = againstGpp.getNrOfAgainstCombinationsPerGame();\n                const againstGppWithPoule = new AgainstGppWithPoule(nrOfPlaces, againstGpp);\n                nrOfPossibleCombinations = againstGppWithPoule.getNrOfPossibleAgainstCombinations();\n                totalNrOfGames += againstGppWithPoule.getTotalNrOfGames();\n            });\n            return uniqueNrOfCombinationsPerGame === undefined\n                || totalNrOfGames === 0 || nrOfPossibleCombinations === undefined \n                || this.assignEqually(totalNrOfGames,nrOfPossibleCombinations,uniqueNrOfCombinationsPerGame);\n        });\n    }\n\n\n    private assignEqually(totalNrOfGames: number, nrOfPossibleCombinations: number, nrOfCombinationsPerGame: number): boolean\n    {\n        const nrOfCombinations = nrOfCombinationsPerGame * totalNrOfGames;\n        return this.getNrOfDeficit(nrOfCombinations, nrOfPossibleCombinations) === 0;\n    }\n\n    private getNrOfDeficit(nrOfCombinations: number, nrOfPossibleCombinations: number ): number\n    {\n        if( nrOfPossibleCombinations === 0) {\n            return 0;\n        }\n        const rest = nrOfCombinations % nrOfPossibleCombinations;\n        return rest === 0 ? 0 : nrOfPossibleCombinations - rest;\n    }\n\n}\n\nclass AgainstGppMap extends Map<string, AgainstGpp[]> {\n\n    constructor(againstGpps: AgainstGpp[]) {\n        super();\n        againstGpps.forEach((againstGpp: AgainstGpp) => {\n            const id = againstGpp.getGamePlacesId();\n            if( !this.has(id) ) {\n                this.set(id, []);    \n            } else {\n                this.get(id).push(againstGpp);    \n            }\n        });\n    }\n}","import { Category } from './category';\nimport { StartLocation } from './competitor/startLocation';\nimport { Place } from './place';\nimport { Poule } from './poule';\nimport { Round } from './qualify/group';\nimport { RoundNumber } from './round/number';\n\n\nexport class Structure {\n    constructor(\n        protected categories: Category[],\n        protected firstRoundNumber: RoundNumber\n    ) {\n    }\n\n    getCategories(): Category[] {\n        return this.categories;\n    }\n\n    getCategory(number: number): Category {\n        const category = this.getCategories().find(category => category.getNumber() === number);\n        if (category === undefined) {\n            throw Error('de category kan niet gevonden worden');\n        }\n        return category;\n    }\n\n    hasSingleCategory(): boolean {\n        return this.categories.length === 1;\n    }\n\n    getSingleCategory(): Category {\n        if (this.categories.length !== 1) {\n            throw Error('there should be one category');\n        }\n        return this.categories[0];\n    }\n\n    getPreviousCategory(category: Category): Category|undefined {\n        return this.getCategories().find((categoryIt: Category) => {\n            return categoryIt.getNumber() === (category.getNumber() - 1);\n        });\n    }\n\n    getRootRounds(): Round[] {\n        return this.categories.map((category: Category): Round => {\n            return category.getRootRound();\n        });\n    }\n\n    getFirstRoundNumber(): RoundNumber {\n        return this.firstRoundNumber;\n    }\n\n    getLastRoundNumber(): RoundNumber {\n        const getLastRoundNumber = (roundNumber: RoundNumber): RoundNumber => {\n            const nextRoundNumber = roundNumber.getNext();\n            if (!nextRoundNumber) {\n                return roundNumber;\n            }\n            return getLastRoundNumber(nextRoundNumber);\n        };\n        return getLastRoundNumber(this.getFirstRoundNumber());\n    }\n\n    getRoundNumbers(): RoundNumber[] {\n        const roundNumbers: RoundNumber[] = [];\n        const addRoundNumber = (roundNumber: RoundNumber) => {\n            roundNumbers.push(roundNumber);\n            const nextRoundNumber = roundNumber.getNext();\n            if (nextRoundNumber) {\n                addRoundNumber(nextRoundNumber);\n            }\n        };\n        addRoundNumber(this.getFirstRoundNumber());\n        return roundNumbers;\n    }\n\n    getRoundNumber(initRoundNumberAsValue: number): RoundNumber | undefined {\n        const getRoundNumber = (roundNumberAsValue: number, roundNumber?: RoundNumber): RoundNumber | undefined => {\n            if (roundNumber === undefined) {\n                return undefined;\n            }\n            if (roundNumberAsValue === roundNumber.getNumber()) {\n                return roundNumber;\n            }\n            return getRoundNumber(roundNumberAsValue, roundNumber.getNext());\n        };\n        return getRoundNumber(initRoundNumberAsValue, this.getFirstRoundNumber());\n    }\n\n    allPoulesHaveGames(): boolean {\n        return this.categories.every((category: Category) => this.allRoundsHaveGames([category.getRootRound()]));\n    }\n\n    protected allRoundsHaveGames(rounds: Round[]): boolean {\n        return rounds.every((round: Round) => {\n            if (round.getPoules().some((poule: Poule) => poule.getNrOfGames() === 0)) {\n                return false;\n            }\n            return this.allRoundsHaveGames(round.getChildren());\n        });\n    }\n\n    getStartPlace(startLocation: StartLocation): Place {\n        return this.getCategory(startLocation.getCategoryNr()).getRootRound().getPoule(startLocation.getPouleNr()).getPlace(startLocation.getPlaceNr());\n    }\n}\n","import { BalancedPouleStructure } from \"./balanced\";\n\nexport class BalancedMinimumPouleStructure extends BalancedPouleStructure {\n    constructor(private minNrOfPoulePlaces: number, ...nrOfPlaces: number[]) {\n        super(...nrOfPlaces);\n        this.forEach((nrOfPoulePlaces: number) => {\n            if (nrOfPoulePlaces < this.minNrOfPoulePlaces) {\n                throw Error('een poule heeft te weinig plekken');\n            }\n        });\n    }\n\n    public removePlace(): BalancedMinimumPouleStructure {\n        const poules = this.slice();\n\n        const greatestNrOfPlaces = this.getBiggestPoule();\n\n\n        const idx = poules.lastIndexOf(greatestNrOfPlaces);\n        if (idx < 0) {\n            throw Error('no poules available');\n        }\n\n        // als door het verwijderen van de plek de poulegrootte te klein wordt\n        if ((poules[idx] - 1) < this.minNrOfPoulePlaces) { // remove poule\n            let nrOfPlacesToRemove = poules[idx];\n            poules.splice(idx, 1);\n            let newPouleStructure = new BalancedMinimumPouleStructure(this.minNrOfPoulePlaces, ...poules);\n            while (nrOfPlacesToRemove--) {\n                newPouleStructure = newPouleStructure.removePlace();\n            }\n            return newPouleStructure;\n        }\n        poules[idx] = poules[idx] - 1;\n        return new BalancedMinimumPouleStructure(this.minNrOfPoulePlaces, ...poules);\n    }\n}","import { Place } from \"../place\";\nimport { Poule } from \"../poule\";\nimport { BalancedMinimumPouleStructure } from \"../poule/structure/balancedMinimum\";\nimport { QualifyDistribution } from \"../qualify/distribution\";\nimport { QualifyGroup, Round } from \"../qualify/group\";\nimport { QualifyTarget } from \"../qualify/target\";\n\nexport class RemovalValidator {\n\n    public willStructureBeValid(\n        round: Round,\n        nrOfPlacesToRemoveMap: QualifyGroupNrOfPlacesMap,\n        minNrOfPlacesPerPoule: number\n    ): void {\n\n\n        [QualifyTarget.Winners, QualifyTarget.Losers].forEach((target: QualifyTarget) => {\n            const qualifyGroups = round.getQualifyGroups(target);\n\n            qualifyGroups.forEach((qualifyGroup: QualifyGroup) => {\n                const childRound = qualifyGroup.getChildRound();\n                const qualifyGroupIdx = this.getQualifyGroupIndex(qualifyGroup);\n                let nrOfPlacesToRemove = 0;\n                if (nrOfPlacesToRemoveMap[qualifyGroupIdx] !== undefined) {\n                    nrOfPlacesToRemove = nrOfPlacesToRemoveMap[qualifyGroupIdx];\n                }\n                if (nrOfPlacesToRemove === 0) {\n                    return;\n                }\n\n                // poules = childRound.createPouleStructure().toArray();\n                let newChildPouleStructure = new BalancedMinimumPouleStructure(minNrOfPlacesPerPoule, ...childRound.createPouleStructure());\n                while (nrOfPlacesToRemove--) {\n                    newChildPouleStructure = newChildPouleStructure.removePlace();\n                }\n                const placesToRemove = this.getRemovedPlaces(childRound, newChildPouleStructure);\n                nrOfPlacesToRemoveMap = this.getNrOfPlacesToRemoveMap(round, placesToRemove);\n                this.willStructureBeValid(childRound, nrOfPlacesToRemoveMap, minNrOfPlacesPerPoule);\n            });\n        });\n    }\n\n    private getRemovedPlaces(round: Round, pouleStructure: BalancedMinimumPouleStructure): Place[] {\n        let removedPlaces = [];\n        round.getPoules().forEach((poule: Poule) => {\n            if (pouleStructure.length === 0) {\n                removedPlaces = removedPlaces.concat(poule.getPlaces().slice());\n            } else {\n                const nrOfPlaces = pouleStructure.shift();\n                poule.getPlaces().forEach((place: Place) => {\n                    if (place.getPlaceNr() > nrOfPlaces) {\n                        removedPlaces.push(place);\n                    }\n                });\n            }\n        });\n        return removedPlaces;\n    }\n\n    public getNrOfPlacesToRemoveMap(round: Round, placesToRemove: Place[]): QualifyGroupNrOfPlacesMap {\n        const map: QualifyGroupNrOfPlacesMap = {};\n        round.getQualifyGroups().forEach((qualifyGroup: QualifyGroup) => {\n            const idx = this.getQualifyGroupIndex(qualifyGroup);\n            map[idx] = this.getQualifyGroupNrOfPlacesToRemove(placesToRemove, qualifyGroup);\n        });\n        return map;\n    }\n\n    private getQualifyGroupNrOfPlacesToRemove(placesToRemove: Place[], childQualifyGroup: QualifyGroup): number {\n        let nrOfPlaces = 0;\n        // determine which qualifyGroup needs to remove how many places\n        placesToRemove.forEach((placeIt: Place) => {\n            const horPoule = placeIt.getHorizontalPoule(childQualifyGroup.getTarget());\n\n            if( childQualifyGroup.getDistribution() === QualifyDistribution.HorizontalSnake) {\n                let singleQualifyRule = childQualifyGroup.getFirstSingleRule();\n                while (singleQualifyRule) {\n                    if (singleQualifyRule.getFromHorizontalPoule() === horPoule) {\n                        nrOfPlaces++;\n                    }\n                    singleQualifyRule = singleQualifyRule.getNext();\n                }\n            } else {\n                throw new Error('getQualifyGroupNrOfPlacesToRemove'); // @TODO CDK            \n            }\n\n            \n        });\n        return nrOfPlaces;\n    }\n\n    public getQualifyGroupIndex(qualifyGroup: QualifyGroup): string {\n        return qualifyGroup.getTarget() + qualifyGroup.getNumber();\n    }\n}\n\nexport interface QualifyGroupNrOfPlacesMap {\n    [key: string]: number;\n}\n","import { QualifyGroup, Round } from '../qualify/group';\nimport { Competition } from '../competition';\nimport { Place } from '../place';\nimport { Poule } from '../poule';\nimport { RoundNumber } from '../round/number';\nimport { Structure } from '../structure';\nimport { VoetbalRange } from '../range';\nimport { JsonPlanningConfig } from '../planning/config/json';\nimport { Injectable } from '@angular/core';\nimport { QualifyTarget } from '../qualify/target';\nimport { BalancedPouleStructure } from '../poule/structure/balanced';\nimport { PlanningConfigMapper } from '../planning/config/mapper';\nimport { HorizontalPouleCreator } from '../poule/horizontal/creator';\nimport { QualifyRuleCreator } from '../qualify/rule/creator';\nimport { BalancedPouleStructureCreator } from '../poule/structure/balancedCreator';\nimport { PlaceRanges } from './placeRanges';\nimport { QualifyGroupNrOfPlacesMap, RemovalValidator } from './removalValidator';\nimport { Category } from '../category';\nimport { CompetitionSport } from '../competition/sport';\nimport { StructureCell } from './cell';\nimport { QualifyDistribution } from '../qualify/distribution';\nimport { HorizontalSingleQualifyRule } from '../qualify/rule/horizontal/single';\nimport { CompetitionSportEditor } from '../competition/sport/editor';\nimport { CompetitionSportGetter } from '../competition/sport/getter';\nimport { VerticalSingleQualifyRule } from '../qualify/rule/vertical/single';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class StructureEditor {\n    private horPouleCreator: HorizontalPouleCreator;\n    private rulesCreator: QualifyRuleCreator;\n    private removalValidator: RemovalValidator;\n    private placeRanges: PlaceRanges | undefined;\n\n    constructor(\n        private competitionSportEditor: CompetitionSportEditor,\n        private planningConfigMapper: PlanningConfigMapper/*,\n        @Inject('placeRanges') private placeRanges: PlaceRanges*/) {\n        this.horPouleCreator = new HorizontalPouleCreator();\n        this.rulesCreator = new QualifyRuleCreator();\n        this.removalValidator = new RemovalValidator();\n    }\n\n    setPlaceRanges(placeRanges: PlaceRanges): void {\n        this.placeRanges = placeRanges;\n    }\n\n    create(\n        competition: Competition,\n        pouleStructure: number[],\n        jsonPlanningConfig?: JsonPlanningConfig | undefined,\n        categoryName?: string | undefined,): Structure {\n\n        const firstRoundNumber = new RoundNumber(competition, undefined);\n        this.planningConfigMapper.toObject(jsonPlanningConfig, firstRoundNumber);\n\n        const newCategoryName = categoryName ?? Category.DefaultName;\n        const category = this.addCategoryHelper(\n            newCategoryName, newCategoryName.substring(0,1), 1, firstRoundNumber,\n            new BalancedPouleStructure(...pouleStructure)\n        );\n\n        const structure = new Structure([category], firstRoundNumber);\n        competition.getSports().forEach(competitionSport => {\n            this.competitionSportEditor.addToStructure(competitionSport, structure);\n        });\n\n        const rootRound = category.getRootRound();\n        this.horPouleCreator.create(rootRound);\n        this.rulesCreator.create(rootRound);\n\n        return new Structure([category], firstRoundNumber);\n    }\n\n    public addCategory(\n        name: string,\n        abbreviation: string | undefined,\n        number: number,        \n        firstRoundNumber: RoundNumber,\n        pouleStructure: BalancedPouleStructure): Category {\n\n        // begin editing\n        const category = this.addCategoryHelper(name, abbreviation, number, firstRoundNumber, pouleStructure);\n        firstRoundNumber.getCompetitionSports().forEach((competitionSport: CompetitionSport) => {\n            this.competitionSportEditor.addToCategory(competitionSport, category);\n        });\n        // end editing\n        const rootRound = category.getRootRound();\n        this.horPouleCreator.create(rootRound);\n        this.rulesCreator.create(rootRound);\n        return category;\n    }\n\n    public addCategoryHelper(\n        name: string,\n        abbreviation: string | undefined,\n        number: number,\n        firstRoundNumber: RoundNumber,\n        pouleStructure: BalancedPouleStructure): Category {\n\n        // begin editing\n        const competition = firstRoundNumber.getCompetition();\n\n        const category = new Category(competition, name, number);\n        category.setAbbreviation(abbreviation);\n        const structureCell = new StructureCell(category, firstRoundNumber);\n        const rootRound = new Round(structureCell, undefined);\n\n        this.fillRound(rootRound, pouleStructure);\n        return category;\n    }\n\n    public switchCategories(structure: Structure, activeCategory: Category, forcedCategory: Category): void {\n        \n\n        // STEP 1 : SWITCH NUMBERS\n        const activeNewNr = forcedCategory.getNumber()\n        forcedCategory.setNumber(activeCategory.getNumber())\n        activeCategory.setNumber(activeNewNr);\n\n        // STEP 2 : UPDATE STRUCTURE CATEGORY-INDEX\n        const categories: Category[] = structure.getCategories();\n        this.switchInArray(categories, activeCategory, forcedCategory);\n\n        // STEP 3 : UPDATE ROUNDNUMBER STRUCTURECELL-INDEX\n        structure.getRoundNumbers().forEach( (roundNumber: RoundNumber): void => {\n            let previousStructureCell = undefined\n            try {\n                previousStructureCell = activeCategory.getStructureCell(roundNumber);\n            }\n            catch (e) {\n            }\n            let structureCell = undefined\n            try {\n                structureCell = forcedCategory.getStructureCell(roundNumber);\n            }\n            catch (e) {\n            }\n            if (previousStructureCell !== undefined ) {\n                roundNumber.setStructureCell(previousStructureCell)\n            }\n            if (structureCell !== undefined) {\n                roundNumber.setStructureCell(structureCell)\n            }\n        });        \n\n    }\n\n    // with new numbers\n    private switchInArray(categories: Category[], previousCategory: Category, category: Category): void {\n        const idx = categories.indexOf(category);\n        const idxPrev = categories.indexOf(previousCategory);\n\n        if (idx >= 0 && idxPrev >= 0) {\n            var tmp = categories[idx];\n            categories[idx] = categories[idxPrev];\n            categories[idxPrev] = tmp;\n        }\n    }\n\n    addChildRound(\n        parentRound: Round, \n        qualifyTarget: QualifyTarget, \n        pouleStructure: number[],\n        distribution: QualifyDistribution = QualifyDistribution.HorizontalSnake): Round {\n        const balancedPouleStructure = new BalancedPouleStructure(...pouleStructure);\n        this.placeRanges?.validateStructure(balancedPouleStructure);\n        this.rulesCreator.remove(parentRound);\n        // begin editing\n\n        const qualifyGroup = this.addChildRoundHelper(\n            parentRound,\n            qualifyTarget,\n            balancedPouleStructure,\n            distribution\n        );\n        // end editing\n        this.horPouleCreator.create(qualifyGroup.getChildRound());\n        this.rulesCreator.create(parentRound);\n        return qualifyGroup.getChildRound();\n    }\n\n    private addChildRoundHelper(\n        parentRound: Round, \n        qualifyTarget: QualifyTarget, \n        pouleStructure: BalancedPouleStructure,\n        distribution: QualifyDistribution): QualifyGroup {\n        let nextStructureCell = parentRound.getStructureCell().getNext();\n        if (nextStructureCell === undefined) {\n            nextStructureCell = parentRound.getStructureCell().createNext();\n        }\n        const qualifyGroup = new QualifyGroup(parentRound, qualifyTarget, nextStructureCell);\n        qualifyGroup.setDistribution(distribution);\n        this.fillRound(qualifyGroup.getChildRound(), pouleStructure);\n        return qualifyGroup;\n    }\n\n\n    /**\n     * voor een ronde kun je:\n     * A een plek toevoegen(in rootround, of in een volgende ronde, via addqualifier) KAN GEEN INVLOED HEBBEN OP HET AANTAL QUALIFYGROUPS\n     * B een plek verwijderen(in rootround, of in een volgende ronde, via removequalifier) \n     * C het aantal poules verkleinen met 1     - refillRound, update horpoules and update previousround qualifyrules\n     * D C het aantal poules vergroten met 1    - refillRound, update horpoules and update previousround qualifyrules\n     * \n     * C, D hebben geen invloed op het aantal plekken in volgende ronden\n     */\n    // in root only a poule can be added\n    // options:\n    // 3,3 => 4, 5\n    addPlaceToRootRound(rootRound: Round): Place {\n        const newNrOfPlaces = rootRound.getNrOfPlaces() + 1;\n        const nrOfPoules = rootRound.getPoules().length;\n        this.validate(rootRound.getCompetition(), newNrOfPlaces, nrOfPoules);\n\n        this.horPouleCreator.remove(rootRound);\n        this.rulesCreator.remove(rootRound);\n        // begin editing        \n        rootRound.addPlace();\n        // end editing\n        this.horPouleCreator.create(rootRound);\n        this.rulesCreator.create(rootRound);\n\n        return rootRound.getFirstPlace(QualifyTarget.Losers);\n    }\n\n    removePlaceFromRootRound(rootRound: Round) {\n        if (rootRound.getNrOfDropoutPlaces().amount <= 0) {\n            throw new Error('de deelnemer kan niet verwijderd worden, omdat alle deelnemer naar de volgende ronde gaan');\n        }\n        const newNrOfPlaces = rootRound.getNrOfPlaces() - 1;\n        this.validate(rootRound.getCompetition(), newNrOfPlaces, rootRound.getPoules().length);\n        this.horPouleCreator.remove(rootRound);\n        this.rulesCreator.remove(rootRound);\n        // begin editing\n        rootRound.removePlace();\n        // end editing\n        this.horPouleCreator.create(rootRound);\n        this.rulesCreator.create(rootRound);\n    }\n\n    public addPouleToRootRound(rootRound: Round): Poule {\n        const lastPoule = rootRound.getFirstPoule();\n        const newNrOfPlaces = rootRound.getNrOfPlaces() + lastPoule.getPlaces().length;\n        this.validate(rootRound.getCompetition(), newNrOfPlaces, rootRound.getPoules().length + 1);\n\n        this.horPouleCreator.remove(rootRound);\n        this.rulesCreator.remove(rootRound);\n        // begin editing\n        rootRound.addPoule();\n        this.addChildRoundPlacesForNonCrossFinals(rootRound);\n        // end editing\n        this.horPouleCreator.create(rootRound);\n        this.rulesCreator.create(rootRound);\n\n        return rootRound.getLastPoule();\n    }\n\n    removePouleFromRootRound(rootRound: Round) {\n        const poules = rootRound.getPoules();\n        if (poules.length <= 1) {\n            throw new Error('er moet minimaal 1 poule overblijven');\n        }\n        // const lastPoule = rootRound.getLastPoule();\n        // const newNrOfPlaces = rootRound.getNrOfPlaces() - lastPoule.getPlaces().length;\n\n        // if (newNrOfPlaces < rootRound.getNrOfPlacesChildren()) {\n        //     throw new Error('de poule kan niet verwijderd worden, omdat er te weinig deelnemers '\n        //         + 'overblijven om naar de volgende ronde gaan');\n        // }\n\n        const places = rootRound.getLastPoule().getPlaces();\n        const nrOfPlacesToRemoveMap = this.removalValidator.getNrOfPlacesToRemoveMap(rootRound, places);\n        this.removalValidator.willStructureBeValid(rootRound, nrOfPlacesToRemoveMap, this.getMinPlacesPerPouleSmall());\n\n        this.horPouleCreator.remove(rootRound);\n        this.rulesCreator.remove(rootRound);\n        // begin editing\n        rootRound.removePoule();\n        this.removeChildRoundPlaces(rootRound, nrOfPlacesToRemoveMap);\n        // end editing\n        this.horPouleCreator.create(rootRound);\n        this.rulesCreator.create(rootRound);\n    }\n\n    private removeChildRoundPlaces(parentRound: Round, nrOfPlacesToRemoveMap: QualifyGroupNrOfPlacesMap): void {\n        [QualifyTarget.Winners, QualifyTarget.Losers].forEach((qualifyTarget: QualifyTarget) => {\n            const qualifyGroups = parentRound.getQualifyGroups(qualifyTarget);\n            if (qualifyGroups.length < 2) { // kan weg?\n                return;\n            }\n            qualifyGroups.forEach((qualifyGroup: QualifyGroup) => {\n                const qualifyGroupIdx = this.removalValidator.getQualifyGroupIndex(qualifyGroup);\n                let nrOfPlacesToRemove = nrOfPlacesToRemoveMap[qualifyGroupIdx];\n                while (nrOfPlacesToRemove--) {\n                    this.removePlaceFromRound(qualifyGroup.getChildRound(), false);\n                }\n            });\n        });\n    }\n\n    public incrementNrOfPoules(round: Round) {\n        this.validate(round.getCompetition(), round.getNrOfPlaces(), round.getPoules().length + 1);\n\n        this.horPouleCreator.remove(round);\n        this.rulesCreator.remove(round);\n        // begin editing\n        const nrOfPlacesToRemove = round.addPoule().getPlaces().length;\n        for (let i = 0; i < nrOfPlacesToRemove; i++) {\n            round.removePlace();\n        }\n        this.addChildRoundPlacesForNonCrossFinals(round);\n        // end editing\n        this.horPouleCreator.create(round);\n        this.rulesCreator.create(round.getParent(), round);\n    }\n\n    public decrementNrOfPoules(round: Round) {\n        const poules = round.getPoules();\n        if (poules.length <= 1) {\n            throw new Error('er moet minimaal 1 poule overblijven');\n        }\n\n        this.horPouleCreator.remove(round);\n        this.rulesCreator.remove(round);\n        // begin editing        \n        const nrOfPlacesToAdd = round.removePoule().getPlaces().length;\n        for (let i = 0; i < nrOfPlacesToAdd; i++) {\n            round.addPlace();\n        }\n        // end editing\n        this.horPouleCreator.create(round);\n        this.rulesCreator.create(round.getParent(), round);\n    }\n\n    updateDistribution(qualifyGroup: QualifyGroup, distribution: QualifyDistribution): void {\n\n        const parentRound = qualifyGroup.getParentRound();\n        this.horPouleCreator.remove(parentRound);\n        this.rulesCreator.remove(parentRound);\n\n        // begin editing\n        qualifyGroup.setDistribution(distribution);\n\n        // end editing\n        this.horPouleCreator.create(parentRound);\n        this.rulesCreator.create(parentRound, qualifyGroup.getChildRound());\n    }\n\n\n    addQualifiers(parentRound: Round, qualifyTarget: QualifyTarget, nrOfToPlacesToAdd: number, distribution: QualifyDistribution, maxNrOfPoulePlaces?: number) {\n        const nrOfPlaces = parentRound.getNrOfPlaces();\n        const nrOfToPlaces = parentRound.getNrOfPlacesChildren();\n        if ((nrOfToPlaces + nrOfToPlacesToAdd) > nrOfPlaces) {\n            throw new Error('er mogen maximaal ' + (nrOfPlaces - nrOfToPlaces) + ' deelnemers naar de volgende ronde');\n        }\n\n        const sportVariants = parentRound.getCompetition().getSportVariants();\n        let qualifyGroup = parentRound.getBorderQualifyGroup(qualifyTarget);\n        const addChildRound = qualifyGroup === undefined;\n        if (addChildRound) {\n            let minNrOfPlacesPerPoule = this.placeRanges?.getPlacesPerPouleSmall().min;\n            if( minNrOfPlacesPerPoule === undefined) {\n               minNrOfPlacesPerPoule = (new CompetitionSportGetter()).getMinNrOfPlacesPerPoule(sportVariants);\n            }\n            if (nrOfToPlacesToAdd < minNrOfPlacesPerPoule) {\n                throw new Error('er moeten minimaal ' + minNrOfPlacesPerPoule + ' deelnemers naar de volgende ronde, vanwege het aantal deelnemers per wedstrijd');\n            }\n            const newStructure = new BalancedPouleStructure(minNrOfPlacesPerPoule);\n            this.placeRanges?.validateStructure(newStructure);\n            this.horPouleCreator.remove(parentRound);\n            this.rulesCreator.remove(parentRound);\n\n            // begin editing\n            qualifyGroup = this.addChildRoundHelper(parentRound, qualifyTarget, newStructure, distribution);\n            nrOfToPlacesToAdd -= minNrOfPlacesPerPoule;\n            const childRound = qualifyGroup.getChildRound();\n            while (nrOfToPlacesToAdd-- > 0) {\n                childRound.addPlace();\n            }\n            // end editing\n\n            this.horPouleCreator.create(parentRound, childRound);\n            this.rulesCreator.create(parentRound, childRound);\n        } else {\n            const childRound = qualifyGroup.getChildRound();\n            this.validate(childRound.getCompetition(), \n            childRound.getNrOfPlaces() + nrOfToPlacesToAdd, childRound.getPoules().length);\n            this.horPouleCreator.remove(childRound);\n            this.rulesCreator.remove(parentRound, childRound);\n            // begin editing\n            let pouleAdded = false;\n            while (nrOfToPlacesToAdd-- > 0) {\n                const pouleStructure = childRound.createPouleStructure();\n                if (maxNrOfPoulePlaces && this.canAddPouleByAddingOnePlace(pouleStructure, maxNrOfPoulePlaces)) {\n                    const nrOfPlacesToRemove = childRound.addPoule().getPlaces().length;\n                    for (let i = 0; i < nrOfPlacesToRemove - 1; i++) {\n                        childRound.removePlace();\n                    }\n                    pouleAdded = true;\n                } else {\n                    childRound.addPlace();\n                }\n            }\n            if (pouleAdded) {\n                this.addChildRoundPlacesForNonCrossFinals(childRound);\n            }\n            // end editing\n            this.horPouleCreator.create(childRound);\n            this.rulesCreator.create(parentRound, childRound);\n        }\n    }\n\n    protected canAddPouleByAddingOnePlace(pouleStructure: BalancedPouleStructure, maxNrOfPoulePlaces: number): boolean {\n        let nrOfPlacesForNewPoule = 0;\n        pouleStructure.forEach((nrOfPoulePlaces: number) => {\n            const nrOfPoulePlacesForNewPoule = nrOfPoulePlaces - maxNrOfPoulePlaces;\n            if (nrOfPoulePlacesForNewPoule > 0) {\n                nrOfPlacesForNewPoule += nrOfPoulePlacesForNewPoule;\n            }\n        });\n        return (nrOfPlacesForNewPoule + 1) >= maxNrOfPoulePlaces;\n    }\n\n    removeQualifier(parentRound: Round, qualifyTarget: QualifyTarget): boolean {\n        const qualifyGroup = parentRound.getBorderQualifyGroup(qualifyTarget);\n        if (qualifyGroup === undefined) {\n            return false;\n        }\n        const childRound = qualifyGroup.getChildRound();\n        this.rulesCreator.remove(parentRound);\n        // begin editing\n        if (childRound.getNrOfPlaces() <= this.getMinPlacesPerPouleSmall()) {\n            qualifyGroup.detach();\n        } else {\n            this.removePlaceFromRound(childRound, false);\n        }\n        // end editing\n        this.rulesCreator.create(parentRound);\n        return true;\n    }\n\n    private fillRound(round: Round, pouleStructure: BalancedPouleStructure) {\n        pouleStructure.forEach((nrOfPlaces: number) => {\n            const poule = new Poule(round);\n            for (let placeNr = 1; placeNr <= nrOfPlaces; placeNr++) {\n                new Place(poule)\n            }\n        });\n    }\n\n    protected getNrOfQualifiersPrevious(singleRule: HorizontalSingleQualifyRule | VerticalSingleQualifyRule): number {\n        return singleRule.getNrOfMappings() + singleRule.getNrOfToPlacesTargetSide(QualifyTarget.Winners);\n    }\n\n    protected getNrOfQualifiersNext(singleRule: HorizontalSingleQualifyRule | VerticalSingleQualifyRule): number {\n        return singleRule.getNrOfMappings() + singleRule.getNrOfToPlacesTargetSide(QualifyTarget.Losers);\n    }\n\n    protected getRoot(round: Round): Round {\n        const parent = round.getParent();\n        return parent ? this.getRoot(parent) : round;\n    }\n\n    createBalanced(nrOfPlaces: number, nrOfPoules: number): BalancedPouleStructure {\n        const creator = new BalancedPouleStructureCreator()\n        return creator.create(nrOfPlaces, nrOfPoules);\n    }\n\n    isQualifyGroupSplittableAt(singleRule: HorizontalSingleQualifyRule | VerticalSingleQualifyRule): boolean {\n        const next = singleRule.getNext();\n        if (next === undefined) {\n            return false;\n        }\n        return this.getNrOfQualifiersPrevious(singleRule) >= this.getMinPlacesPerPouleSmall()\n            && this.getNrOfQualifiersNext(next) >= this.getMinPlacesPerPouleSmall();\n    }\n\n    /**\n* 1 : wanneer er een kw.groep van minimaal 2 horizontale poules is (grens h poule  moet minimaal twee door laten gaan) \n* 2 : 2 kw.groepen van winners of losers.\n*/\n    isSomeQualifyGroupEditable(parentRound: Round, target: QualifyTarget): boolean {\n        return this.isSomeQualifyGroupSplittable(parentRound, target)\n            || this.isSomeQualifyGroupMergable(parentRound, target)\n            || this.hasSomeQualifyGroupASingleRule(parentRound, target);\n    }\n\n    isSomeQualifyGroupSplittable(parentRound: Round, target: QualifyTarget): boolean {\n        return parentRound.getQualifyGroups(target).some((qualifyGroup: QualifyGroup) => {\n            return this.isQualifyGroupSplittable(qualifyGroup);\n        });\n    }\n\n    isSomeQualifyGroupMergable(parentRound: Round, target: QualifyTarget): boolean {\n        let previous: QualifyGroup | undefined;\n        return parentRound.getQualifyGroups(target).some((qualifyGroup: QualifyGroup) => {\n            if (previous && this.areQualifyGroupsMergable(previous, qualifyGroup)) {\n                return true;\n            };\n            previous = qualifyGroup;\n            return false;\n        });\n    }\n\n    hasSomeQualifyGroupASingleRule(parentRound: Round, target: QualifyTarget): boolean {\n        return parentRound.getQualifyGroups(target).some((qualifyGroup: QualifyGroup) => {\n            return qualifyGroup.getFirstSingleRule() !== undefined;\n        });\n    }\n\n    isQualifyGroupSplittable(qualifyGroup: QualifyGroup): boolean {\n        //console.log('isQualifyGroupSplittable',qualifyGroup);\n        let singleRule: HorizontalSingleQualifyRule | VerticalSingleQualifyRule | undefined = qualifyGroup.getFirstSingleRule();\n        while (singleRule !== undefined) {\n            if (this.isQualifyGroupSplittableAt(singleRule)) {\n                return true;\n            }\n            singleRule = singleRule.getNext();\n        }\n        return false;\n    }\n\n    // horizontalPoule is split-points, from which qualifyGroup\n    splitQualifyGroupFrom(qualifyGroup: QualifyGroup, singleRule: HorizontalSingleQualifyRule | VerticalSingleQualifyRule) {\n        const parentRound = qualifyGroup.getParentRound();\n        if (parentRound === undefined) {\n            return;\n        }\n        const nrOfToPlaces = singleRule.getNrOfMappings() + singleRule.getNrOfToPlacesTargetSide(QualifyTarget.Winners);\n        const borderSideNrOfToPlaces = singleRule.getNrOfToPlacesTargetSide(QualifyTarget.Losers);\n        if (nrOfToPlaces < this.getMinPlacesPerPouleSmall() || borderSideNrOfToPlaces < this.getMinPlacesPerPouleSmall()) {\n            throw new Error('de kwalificatiegroep is niet splitsbaar');\n        }\n        const childRound = qualifyGroup.getChildRound();\n        this.rulesCreator.remove(parentRound);\n        // begin editing\n\n        // STEP 1 : insert new round\n        const newQualifyGroup = this.insertAfterQualifyGroup(parentRound, qualifyGroup);\n        // STEP 2 : update existing qualifyGroup        \n        while (childRound.getNrOfPlaces() > (nrOfToPlaces)) {\n            this.removePlaceFromRound(childRound);\n        }\n        // STEP 3 : fill new qualifyGroup\n        const newChildRound = newQualifyGroup.getChildRound();\n        const nrOfPoulePlaces = childRound.getFirstPoule().getPlaces().length;\n        const newNrOfPoules = this.calculateNrOfPoulesInsertedQualifyGroup(borderSideNrOfToPlaces, nrOfPoulePlaces);\n        const balancedPouleStructure = this.createBalanced(borderSideNrOfToPlaces, newNrOfPoules)\n        this.fillRound(newChildRound, balancedPouleStructure);\n        this.horPouleCreator.create(newChildRound);\n        // end editing\n        this.rulesCreator.create(parentRound);\n    }\n\n    // horizontalPoule is split-points, from which qualifyGroup\n    protected insertAfterQualifyGroup(parentRound: Round, qualifyGroup: QualifyGroup): QualifyGroup {\n\n        const childRound = qualifyGroup.getChildRound();\n\n        const newQualifyGroup = new QualifyGroup(\n            parentRound,\n            qualifyGroup.getTarget(),\n            childRound.getStructureCell(),\n            qualifyGroup.getNumber() + 1\n        );\n        newQualifyGroup.setDistribution(qualifyGroup.getDistribution());\n        this.renumber(parentRound, qualifyGroup.getTarget());\n        return newQualifyGroup;\n    }\n\n    protected calculateNrOfPoulesInsertedQualifyGroup(nrOfToPlaces: number, nrOfPoulePlaces: number): number {\n        let nrOfPoules = 0;\n        while ((nrOfToPlaces - nrOfPoulePlaces) >= 0) {\n            nrOfPoules++;\n            nrOfToPlaces -= nrOfPoulePlaces;\n        }\n        if (nrOfToPlaces === 1) {\n            nrOfPoules--;\n        }\n        if (nrOfPoules === 0) {\n            nrOfPoules++;\n        }\n        return nrOfPoules;\n    }\n\n    /**\n     * recalc horPoules and rules only downwards\n     */\n    protected removePlaceFromRound(round: Round, canHaveZeroDropoutPlaces: boolean = true): void {\n        this.horPouleCreator.remove(round);\n        this.rulesCreator.remove(round);\n        // begin editing\n        const nrOfPlacesRemoved = round.removePlace();\n        if (nrOfPlacesRemoved > 1 && round.getPoules().length >= 1) {\n            round.addPlace();\n        }\n        this.horPouleCreator.create(round);\n        const nrOfDropoutPlaces = round.getNrOfDropoutPlaces();\n        if (nrOfDropoutPlaces.amount < 0 || (!canHaveZeroDropoutPlaces && round.getNrOfDropoutPlaces().amount === 0)) {\n            const losersBorderQualifyGroup = round.getBorderQualifyGroup(QualifyTarget.Losers);\n            const childQualifyTarget = losersBorderQualifyGroup !== undefined ? QualifyTarget.Losers : QualifyTarget.Winners;\n            this.removeQualifier(round, childQualifyTarget);\n        } else {\n            this.rulesCreator.create(round);\n        }\n    }\n\n    areQualifyGroupsMergable(previous: QualifyGroup, current: QualifyGroup): boolean {\n        return previous.getTarget() === current.getTarget() && previous.getNumber() + 1 === current.getNumber();\n    }\n\n    mergeQualifyGroups(firstQualifyGroup: QualifyGroup, secondQualifyGroup: QualifyGroup) {\n        const parentRound = firstQualifyGroup.getParentRound();\n        const childRound = firstQualifyGroup.getChildRound();\n        this.horPouleCreator.remove(childRound);\n        this.rulesCreator.remove(parentRound);\n        // begin editing        \n        const nrOfPlacesToAdd = secondQualifyGroup.getChildRound().getNrOfPlaces();\n        secondQualifyGroup.detach();\n        this.renumber(parentRound, secondQualifyGroup.getTarget());\n        for (let counter = 0; counter < nrOfPlacesToAdd; counter++) {\n            firstQualifyGroup.getChildRound().addPlace();\n        }\n        // end editing\n        this.horPouleCreator.create(childRound);\n        this.rulesCreator.create(parentRound);\n    }\n\n    protected renumber(round: Round, qualifyTarget: QualifyTarget) {\n        let number = 1;\n        round.getQualifyGroups(qualifyTarget).forEach(qualifyGroup => {\n            qualifyGroup.setNumber(number++);\n        });\n    }\n\n    validate(competition: Competition, nrOfPlaces: number, nrOfPoules: number) {\n        if (this.placeRanges) {\n            this.placeRanges.validate(nrOfPlaces, nrOfPoules);\n        }\n        const m = (new CompetitionSportGetter()).getMinNrOfPlacesPerPoule(competition.getSportVariants());\n        if (nrOfPlaces < m) {\n            throw new Error('het minimaal aantal deelnemers is ' + m);\n        }\n    }\n\n    getMinPlacesPerPouleSmall(): number {\n        return this.placeRanges ? this.placeRanges.getPlacesPerPouleSmall().min : PlaceRanges.MinNrOfPlacesPerPoule;\n    }\n\n    private addChildRoundPlacesForNonCrossFinals(parentRound: Round): void {\n        [QualifyTarget.Winners, QualifyTarget.Losers].forEach((qualifyTarget: QualifyTarget) => {\n            const qualifyGroups = parentRound.getQualifyGroups(qualifyTarget);\n            if (qualifyGroups.length < 2) {\n                return;\n            }\n\n            const nrOfPoulesBeforeAdd = parentRound.getPoules().length - 1;\n\n            const maxNrOfPlaces = parentRound.getNrOfPlaces();\n            let currentNrOfPlaces = 0;\n            qualifyGroups.forEach((qualifyGroup: QualifyGroup) => {\n                const childRound = qualifyGroup.getChildRound();\n                this.horPouleCreator.remove(childRound);\n                this.rulesCreator.remove(childRound);\n\n                if (maxNrOfPlaces - currentNrOfPlaces < this.getMinPlacesPerPouleSmall()) {\n                    qualifyGroup.detach();\n                    return;\n                }\n\n                const nrOfPlacesToAdd = childRound.getNrOfPlaces() / nrOfPoulesBeforeAdd;\n                for (let i = 1; i <= nrOfPlacesToAdd; i++) {\n                    childRound.addPlace();\n                }\n                currentNrOfPlaces += childRound.getNrOfPlaces();\n                this.horPouleCreator.create(childRound);\n                this.rulesCreator.create(childRound);\n            });\n        });\n    }\n\n    \n}\n\nexport interface PlaceRange extends VoetbalRange {\n    placesPerPoule: VoetbalRange;\n\n}\n\nexport enum ExpandDirection {\n    Horizontal, Vertical\n}","import { Injectable } from '@angular/core';\n\nimport { Competition } from '../competition';\nimport { RoundMapper } from '../round/mapper';\nimport { RoundNumberMapper } from '../round/number/mapper';\nimport { Structure } from '../structure';\nimport { PlanningMapper } from '../planning/mapper';\nimport { JsonStructure } from './json';\nimport { Place } from '../place';\nimport { PlaceMap } from '../place/mapper';\nimport { CompetitionSportMap, CompetitionSportMapper } from '../competition/sport/mapper';\nimport { JsonPoule } from '../poule/json';\nimport { RoundNumber } from '../round/number';\nimport { Poule } from '../poule';\nimport { JsonRound } from '../round/json';\nimport { JsonQualifyGroup } from '../qualify/group/json';\nimport { Round } from '../qualify/group';\nimport { CategoryMapper } from '../category/mapper';\nimport { Category } from '../category';\nimport { JsonCategory } from '../category/json';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class StructureMapper {\n    protected poulesMap: JsonPoulesMap = {};\n    protected placeMap: PlaceMap = {};\n\n    constructor(\n        private competitionSportMapper: CompetitionSportMapper,\n        private roundNumberMapper: RoundNumberMapper,\n        private categoryMapper: CategoryMapper,\n        private planningMapper: PlanningMapper) { }\n\n    toObject(json: JsonStructure, competition: Competition): Structure {\n        const firstRoundNumber = this.roundNumberMapper.toObject(json.firstRoundNumber, competition);\n        const categories = json.categories.map((jsonCategory: JsonCategory): Category => {\n            return this.categoryMapper.toObject(jsonCategory, firstRoundNumber);\n        });\n        const structure = new Structure(categories, firstRoundNumber);\n\n        this.planningToObject(json, structure, this.competitionSportMapper.getMap(competition))\n        return structure;\n    }\n\n    planningToObject(json: JsonStructure, structure: Structure, competitionSportMap: CompetitionSportMap): void {\n        this.initMaps(json.categories, structure.getRootRounds());\n        this.planningMapper.setPlaceMap(this.placeMap);\n        this.planningToRoundNumber(structure.getFirstRoundNumber(), competitionSportMap);\n    }\n\n    protected planningToRoundNumber(roundNumber: RoundNumber, competitionSportMap: CompetitionSportMap): void {\n        const jsonPoules = this.poulesMap[roundNumber.getNumber()];\n        this.planningMapper.toObject(jsonPoules, roundNumber, competitionSportMap);\n        const nextRoundNumber = roundNumber.getNext();\n        if (nextRoundNumber) {\n            this.planningToRoundNumber(nextRoundNumber, competitionSportMap);\n        }\n    }\n\n    toJson(structure: Structure): JsonStructure {\n        return {\n            categories: structure.getCategories().map((category: Category): JsonCategory => {\n                return this.categoryMapper.toJson(category);\n            }),\n            firstRoundNumber: this.roundNumberMapper.toJson(structure.getFirstRoundNumber())\n        };\n    }\n\n    protected initMaps(jsonCategories: JsonCategory[], rootRounds: Round[]): void {\n        this.poulesMap = {};\n        this.placeMap = {};\n        const jsonRootRounds = jsonCategories.map((jsonCategory: JsonCategory): JsonRound => jsonCategory.rootRound);\n        this.initJsonPoulesMap(jsonRootRounds, 1);\n        this.initPlaceMap(rootRounds);\n    }\n\n    protected initJsonPoulesMap(jsonRounds: JsonRound[], roundNumberAsValue: number): void {\n        if (this.poulesMap[roundNumberAsValue] === undefined) {\n            this.poulesMap[roundNumberAsValue] = [];\n        }\n        jsonRounds.forEach((jsonRound: JsonRound) => {\n            jsonRound.poules.forEach((jsonPoule: JsonPoule) => {\n                this.poulesMap[roundNumberAsValue].push(jsonPoule);\n\n            });\n            const jsonChildRounds = jsonRound.qualifyGroups.map((jsonQualifyGroup: JsonQualifyGroup): JsonRound => {\n                return jsonQualifyGroup.childRound;\n            });\n            this.initJsonPoulesMap(jsonChildRounds, roundNumberAsValue + 1);\n        });\n    }\n\n    protected initPlaceMap(rounds: Round[]): void {\n        rounds.forEach((round: Round) => {\n            round.getPoules().forEach((poule: Poule) => {\n                poule.getPlaces().forEach((place: Place) => {\n                    this.placeMap[place.getStructureLocation().toString()] = place;\n                });\n            });\n            this.initPlaceMap(round.getChildren());\n        });\n    }\n}\n\ninterface JsonPoulesMap {\n    [key: number]: JsonPoule[];\n}","import { Category } from \"../category\";\nimport { Round } from \"./group\";\nimport { QualifyTarget } from \"./target\";\n\nexport class RoundRankService {\n    private roundRankCalculatorMap: RoundRankCalculatorMap = {};\n\n    constructor() {\n    }\n\n    public getRank(round: Round): number {\n        const roundRankCalculator = this.getRoundRankCalculator(round.getCategory());\n        return roundRankCalculator.getRank(round);\n    }\n\n    public getRoundRankCalculator(category: Category): RoundRankCalculator {\n        if (this.roundRankCalculatorMap[category.getNumber()] === undefined) {\n            this.roundRankCalculatorMap[category.getNumber()] = new RoundRankCalculator(category);\n        }\n        return this.roundRankCalculatorMap[category.getNumber()];\n    }\n}\n\nexport class RoundRankCalculator {\n    protected map: NrOfDropoutsMap = {};\n\n    constructor(category: Category) {\n        this.map = this.constructMap(category.getRootRound());\n    }\n\n    getRank(round: Round): number {\n        return this.map[round.getPathNode().pathToString()];\n    }\n\n    private constructMap(startRound: Round): NrOfDropoutsMap {\n        const map: NrOfDropoutsMap = {};\n\n        let nrOfDropoutPlaces = 0;\n        const setDropouts = (round: Round) => {\n            round.getQualifyGroups(QualifyTarget.Winners).forEach(qualifyGroup => {\n                setDropouts(qualifyGroup.getChildRound());\n            });\n            map[round.getPathNode().pathToString()] = nrOfDropoutPlaces;\n            nrOfDropoutPlaces += round.getNrOfDropoutPlaces().amount;\n            round.getQualifyGroups(QualifyTarget.Losers).slice().reverse().forEach(qualifyGroup => {\n                setDropouts(qualifyGroup.getChildRound());\n            });\n        };\n        setDropouts(startRound);\n        return map;\n    }\n}\n\ninterface NrOfDropoutsMap {\n    [key: string]: number;\n}\n\nexport interface RoundRankCalculatorMap {\n    [key: number]: RoundRankCalculator;\n}\n","import { Poule } from \"../poule\";\nimport { Round } from \"../qualify/group\";\nimport { RoundRankService } from \"../qualify/roundRankCalculator\";\nimport { RoundNumber } from \"../round/number\";\n\nexport class PouleStructureNumberMap {\n    protected map: InnerPouleStructureNumberMap = {};\n\n    constructor(firstRoundNumber: RoundNumber, roundRankService: RoundRankService) {\n        this.map = this.constructMap(firstRoundNumber, roundRankService);\n    }\n\n    get(poule: Poule): number {\n        return this.map[poule.getStructureLocation()];\n    }\n\n    private constructMap(firstRoundNumber: RoundNumber, roundRankService: RoundRankService): InnerPouleStructureNumberMap {\n        // sla de ronden op per rondenummer en dan op volgorde van 12 + 8\n        const map: InnerPouleStructureNumberMap = {};\n\n        let pouleNr = 1;\n        const setPouleStructureNumbers = (roundNumber: RoundNumber) => {\n            const rounds = roundNumber.getRounds(undefined);\n\n            rounds.sort((roundA: Round, roundB: Round) => {\n                if (roundA.getCategory().getNumber() === roundB.getCategory().getNumber()) {\n                    return roundRankService.getRank(roundA) > roundRankService.getRank(roundB) ? 1 : -1;\n                }\n                return roundA.getCategory().getNumber() > roundB.getCategory().getNumber() ? 1 : -1;\n\n            });\n            rounds.forEach((round: Round) => {\n                round.getPoules().forEach((poule: Poule) => map[poule.getStructureLocation()] = pouleNr++);\n            });\n            const nextRoundNumber = roundNumber.getNext();\n            if (nextRoundNumber !== undefined) {\n                setPouleStructureNumbers(nextRoundNumber);\n            }\n        };\n        setPouleStructureNumbers(firstRoundNumber);\n        return map;\n    }\n}\n\ninterface InnerPouleStructureNumberMap {\n    [key: string]: number;\n}","import { GamePlace } from \"../game/place\";\nimport { Place } from \"../place\";\nimport { Poule } from \"../poule\";\nimport { Round } from \"../qualify/group\";\nimport { RoundRankService } from \"../qualify/roundRankCalculator\";\nimport { QualifyTarget } from \"../qualify/target\";\nimport { PouleStructureNumberMap } from \"./pouleStructureNumberMap\";\nimport { RoundNumber } from \"../round/number\";\nimport { StartLocationMap } from \"../competitor/startLocation/map\";\nimport { StartLocation } from \"../competitor/startLocation\";\nimport { StructureCell } from \"./cell\";\nimport { HorizontalSingleQualifyRule } from \"../qualify/rule/horizontal/single\";\nimport { HorizontalMultipleQualifyRule } from \"../qualify/rule/horizontal/multiple\";\nimport { VerticalSingleQualifyRule } from \"../qualify/rule/vertical/single\";\nimport { VerticalMultipleQualifyRule } from \"../qualify/rule/vertical/multiple\";\n\n\nexport class StructureNameService {\n    private roundRankService: RoundRankService;\n    private pouleStructureNumberMap: PouleStructureNumberMap | undefined;\n    private htmlOutput: boolean = true;\n\n    constructor(private startLocationMap?: StartLocationMap) {\n        this.roundRankService = new RoundRankService();\n    }\n\n    enableConsoleOutput(): void {\n        this.htmlOutput = false;\n    }\n\n    getStartLocationMap(): StartLocationMap | undefined {\n        return this.startLocationMap;\n    }\n\n    getQualifyTargetDescription(qualifyTarget: QualifyTarget, multiple: boolean = false): string {\n        const descr = qualifyTarget === QualifyTarget.Winners ? 'winnaar' : (qualifyTarget === QualifyTarget.Losers ? 'verliezer' : '');\n        return ((multiple && (descr !== '')) ? descr + 's' : descr);\n    }\n\n    getRoundNumberName(roundNumber: RoundNumber): string {\n        const structureCellsSameName = this.getStructureCellsSameName(roundNumber);\n        return structureCellsSameName !== undefined ? structureCellsSameName : this.getOrdinalOutput(roundNumber.getNumber()) + ' ronde';\n    }\n\n    /**\n    *   als allemaal dezelfde naam dan geef die naam\n    *   als verschillende namen geef dan xde ronde met tooltip van de namen\n    */\n    getStructureCellName(structureCell: StructureCell): string {\n        const roundsSameName = this.getRoundsSameName(structureCell);\n        return roundsSameName !== undefined ? roundsSameName : this.getOrdinalOutput(structureCell.getRoundNumber().getNumber()) + ' ronde';\n    }\n\n    getRoundName(round: Round, sameName: boolean = false): string {\n        if (this.roundAndParentsNeedsRanking(round) || !this.childRoundsHaveEqualDepth(round)) {\n            return this.getOrdinalOutput(round.getNumberAsValue()) + ' ronde';\n        }\n\n        const nrOfRoundsToGo = this.getMaxDepth(round);\n        if (nrOfRoundsToGo >= 1) {\n            return this.getHtmlFractalNumber(Math.pow(2, nrOfRoundsToGo)) + ' finale';\n        }\n        if (round.getNrOfPlaces() === 2 && sameName === false) {\n            const rank = this.roundRankService.getRank(round) + 1;\n            return this.getOrdinalOutput(rank) + ' / ' + this.getOrdinalOutput(rank + 1) + ' pl';\n        }\n        return 'finale';\n    }\n\n    getPouleName(poule: Poule, withPrefix: boolean): string {\n        let pouleName = '';\n        if (withPrefix === true) {\n            pouleName = poule.needsRanking() ? 'poule ' : 'wed. ';\n        }\n        const pouleStructureNumber = this.getPouleStructureNumberMap(poule.getRound()).get(poule) - 1;\n        const secondLetter = pouleStructureNumber % 26;\n        if (pouleStructureNumber >= 26) {\n            const firstLetter = (pouleStructureNumber - secondLetter) / 26;\n            pouleName += this.getPouleLetter(firstLetter);\n        }\n        pouleName += this.getPouleLetter(secondLetter + 1);\n        return pouleName;\n    }\n\n    protected getPouleLetter(structureNumber: number): string {\n        return (String.fromCharCode('A'.charCodeAt(0) + structureNumber - 1));\n    }\n\n    getPlaceName(place: Place, p_competitorName?: boolean, longName?: boolean): string {\n        let competitorName = p_competitorName && this.startLocationMap;\n        const startLocation: StartLocation | undefined = place.getStartLocation();\n        if (competitorName && this.startLocationMap && startLocation) {\n            const competitor = this.startLocationMap.getCompetitor(startLocation);\n            if (competitor !== undefined) {\n                return competitor.getName();\n            }\n        }\n        if (longName === true) {\n            return 'nr. ' + place.getPlaceNr() + ' ' + this.getPouleName(place.getPoule(), true);\n        }\n\n        const name = this.getPouleName(place.getPoule(), false);\n        return name + place.getPlaceNr();\n    }\n\n    getPlacesFromName(gamePlaces: GamePlace[], competitorName: boolean, longName?: boolean): string {\n        return gamePlaces.map(gamePlace => this.getPlaceFromName(gamePlace.getPlace(), competitorName, longName)).join(' & ');\n    }\n\n    getPlaceFromName(place: Place, competitorName: boolean, longName: boolean = false): string {\n        \n        competitorName = competitorName ? (this.startLocationMap !== undefined) : false;\n        const startLocation: StartLocation | undefined = place.getStartLocation();\n        if (competitorName && this.startLocationMap && startLocation) {\n            const particpant = this.startLocationMap.getCompetitor(startLocation);\n            if (particpant !== undefined) {\n                return particpant.getName();\n            }\n        }\n\n        let fromQualifyRule: HorizontalSingleQualifyRule | HorizontalMultipleQualifyRule | VerticalSingleQualifyRule | VerticalMultipleQualifyRule | undefined;\n        try {\n            fromQualifyRule = place.getRound().getParentQualifyGroup()?.getRuleByToPlace(place);\n        } catch (e) { }\n        if (fromQualifyRule === undefined) {\n            return this.getPlaceName(place, false, longName);\n        } else if (fromQualifyRule instanceof HorizontalSingleQualifyRule) {            \n\n            const mapping = fromQualifyRule.getMappingByToPlace(place);\n            if (mapping === undefined) {\n                throw Error('mapping not found');\n            }\n            const fromPlace = mapping.getFromPlace();\n            return this.getPlaceFromNameHelper(fromPlace.getPlaceNr(), fromPlace.getPoule(), longName);\n        } \n        const balanced = place.getRound().createPouleStructure().isBalanced();\n        const absolute = !longName || fromQualifyRule.getQualifyTarget() === QualifyTarget.Winners || balanced;            \n        return this.getRankedQualifyRuleName(fromQualifyRule, place, longName, absolute);        \n    }\n\n    protected getPlaceFromNameHelper(rank: number, poule: Poule, longName: boolean = false): string {\n        const pouleName = this.getPouleName(poule, longName);\n\n        let rankOrdinal = this.getOrdinalOutput(rank);\n        if (!longName) {\n            return this.getOrdinalOutput(rank) + pouleName;\n        }\n        if (!poule.needsRanking()) {\n            rankOrdinal += ' pl.';\n        }\n        return rankOrdinal + ' ' + pouleName;\n    }\n\n\n    /*getPlaceNameFrom(fromPlace: Place, longName: boolean): string {\n        const rank = fromPlace.getPlaceNr();\n\n        const poule = fromPlace.getPoule();\n        const pouleName = this.getPouleName(poule, longName);\n        const ordinal = this.getOrdinalOutput(rank) + (!poule.needsRanking() ? ' pl.' : '');\n        return longName ? ordinal + ' ' + pouleName : pouleName + rank;\n    }*/\n\n\n\n    public getQualifyRuleName(rule: HorizontalSingleQualifyRule | HorizontalMultipleQualifyRule | VerticalSingleQualifyRule | VerticalMultipleQualifyRule): string {\n\n        const balanced = rule.getFromRound().createPouleStructure().isBalanced();\n        const absolute = rule.getQualifyTarget() === QualifyTarget.Winners || balanced;\n\n        const fromHorPoule = rule.getFromHorizontalPoule();\n        const fromNumber = absolute ? fromHorPoule.getAbsoluteNumber() : fromHorPoule.getNumber();\n\n        let name = this.getOrdinalOutput(fromNumber);\n        if (rule.getQualifyTarget() === QualifyTarget.Losers && !absolute) {\n            return name + ' pl. van onderen';\n        }\n        return name + ' plekken';\n    }\n\n    public getRankedQualifyRuleName(\n        rule: HorizontalMultipleQualifyRule | VerticalMultipleQualifyRule | VerticalSingleQualifyRule,\n        toPlace: Place,\n        longName: boolean,\n        absolute: boolean\n    ): string {\n        const fromHorPoule = rule.getFromHorizontalPoule();      \n        \n        let fromRank;\n        if (rule instanceof VerticalSingleQualifyRule) {\n            const byRankMapping = rule.getMappingByToPlace(toPlace);\n            if (byRankMapping === undefined) {\n                throw Error('no mapping found');\n            }            \n            fromRank = byRankMapping.getFromRank();\n            // console.log(fromRank);\n        } else {\n            fromRank = rule.getAbsoluteRankByToPlace(toPlace);\n        }\n\n        // CONVERSION FROM HorPoule TO RANK\n        const fromRankContainer = absolute ? fromHorPoule.getAbsoluteNumber() : fromHorPoule.getNumber();\n\n        const fromRankOrdinal = this.getOrdinalOutput(fromRank);\n        if (!longName) {\n            return fromRankOrdinal + '' + fromRankContainer;\n        }\n\n        const firstpart = fromRankOrdinal + ' van';\n\n        let name = firstpart + ' ' + this.getOrdinalOutput(fromRankContainer);\n        if (rule.getQualifyTarget() === QualifyTarget.Losers && !absolute) {\n            name += ' pl. van onderen';\n        } else {\n            name += ' plekken';\n        }\n        return name;\n    }\n\n    protected childRoundsHaveEqualDepth(round: Round): boolean {\n        if (round.getQualifyGroups().length === 1) {\n            return true;\n        }\n        let depthAll: number;\n        return round.getQualifyGroups().every(qualifyGroup => {\n            const qualifyGroupMaxDepth = this.getMaxDepth(qualifyGroup.getChildRound());\n            if (depthAll === undefined) {\n                depthAll = qualifyGroupMaxDepth;\n            }\n            return depthAll === qualifyGroupMaxDepth;\n        });\n    }\n\n    private getStructureCellsSameName(roundNumber: RoundNumber): string | undefined {\n        let structureCellAll: string | undefined;\n        roundNumber.getStructureCells().every((structureCell: StructureCell) => {\n            const name = this.getStructureCellName(structureCell);\n            if (structureCellAll === undefined) {\n                structureCellAll = name;\n            }\n            if (structureCellAll !== name) {\n                structureCellAll = undefined;\n                return false;\n            }\n            return true;\n        });\n        return structureCellAll;\n    }\n\n    private getRoundsSameName(structureCell: StructureCell): string | undefined {\n        let roundNameAll: string | undefined;\n        structureCell.getRounds().every((round) => {\n            const roundName = this.getRoundName(round, true);\n            if (roundNameAll === undefined) {\n                roundNameAll = roundName;\n            }\n            if (roundNameAll !== roundName) {\n                roundNameAll = undefined;\n                return false;\n            }\n            return true;\n        });\n        return roundNameAll;\n    }\n\n    private roundAndParentsNeedsRanking(round: Round): boolean {\n\n        if (!round.needsRanking()) {\n            return false;\n        }\n        const parent = round.getParent();\n        if (parent) {\n            return this.roundAndParentsNeedsRanking(parent);\n        }\n        return true;\n    }\n\n    private getHtmlFractalNumber(number: number): string {\n        if (number === 2 || number === 4) {\n            return '&frac1' + number + ';';\n        }\n        return '<span style=\"font-size: 80%\"><sup>1</sup>&frasl;<sub>' + number + '</sub></span>';\n    }\n\n    private getOrdinalOutput(number: number): string {\n        return number + (this.htmlOutput ? '<sup>e</sup>' : 'e');\n    }\n\n    private getMaxDepth(round: Round): number {\n        let biggestMaxDepth = 0;\n        round.getChildren().forEach(child => {\n            const maxDepth = 1 + this.getMaxDepth(child);\n            if (maxDepth > biggestMaxDepth) {\n                biggestMaxDepth = maxDepth;\n            }\n        });\n        return biggestMaxDepth;\n    }\n\n    private getPouleStructureNumberMap(round: Round): PouleStructureNumberMap {\n        if (this.pouleStructureNumberMap === undefined) {\n            this.pouleStructureNumberMap = new PouleStructureNumberMap(round.getNumber().getFirst(), this.roundRankService);\n        }\n        return this.pouleStructureNumberMap;\n    }\n}","import { NgModule } from '@angular/core';\n\n@NgModule({\n    imports: [\n\n    ],\n    declarations: [\n\n    ],\n    exports: [\n\n    ]\n})\nexport class SportModule { }\n","\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of this package.\n */\nexport * from './src/against/result';\nexport * from './src/against/side';\nexport * from './src/association';\nexport * from './src/association/mapper';\nexport * from './src/association/json';\nexport * from './src/category';\nexport * from './src/category/json';\nexport * from './src/category/map';\nexport * from './src/category/mapper';\nexport * from './src/common/enumReflection';\nexport * from './src/competition';\nexport * from './src/competition/json';\nexport * from './src/competition/mapper';\nexport * from './src/competition/sport';\nexport * from './src/competition/sport/mapper';\nexport * from './src/competition/sport/json';\nexport * from './src/competition/sport/getter';\nexport * from './src/competition/sport/editor';\nexport * from './src/competitor';\nexport * from './src/competitor/json';\nexport * from './src/competitor/startLocation';\nexport * from './src/competitor/startLocation/json';\nexport * from './src/competitor/startLocation/map';\nexport * from './src/competitor/team';\nexport * from './src/competitor/team/mapper';\nexport * from './src/competitor/team/json';\nexport * from './src/console/ansiColor';\nexport * from './src/field';\nexport * from './src/field/mapper';\nexport * from './src/field/json';\nexport * from './src/formation';\nexport * from './src/formation/json';\nexport * from './src/formation/mapper';\nexport * from './src/formation/line';\nexport * from './src/formation/line/json';\nexport * from './src/game';\nexport * from './src/game/against';\nexport * from './src/game/against/json';\nexport * from './src/game/getter';\nexport * from './src/game/mapper';\nexport * from './src/game/json';\nexport * from './src/game/order';\nexport * from './src/game/phase';\nexport * from './src/game/place';\nexport * from './src/game/place/against';\nexport * from './src/game/place/against/json';\nexport * from './src/game/place/together';\nexport * from './src/game/place/together/json';\nexport * from './src/game/place/mapper';\nexport * from './src/game/place/json';\nexport * from './src/game/state';\nexport * from './src/planning/editMode';\nexport * from './src/planning/strategy';\nexport * from './src/game/together';\nexport * from './src/game/together/json';\nexport * from './src/identifiable';\nexport * from './src/identifiable/json';\nexport * from './src/league';\nexport * from './src/league/mapper';\nexport * from './src/league/json';\nexport * from './src/nameService';\nexport * from './src/period';\nexport * from './src/period/json';\nexport * from './src/person';\nexport * from './src/person/json';\nexport * from './src/person/mapper';\nexport * from './src/place/location';\nexport * from './src/place';\nexport * from './src/place/mapper';\nexport * from './src/place/json';\nexport * from './src/planning/mapper';\nexport * from './src/planning/config';\nexport * from './src/planning/config/mapper';\nexport * from './src/planning/config/json';\nexport * from './src/planning/gameAmountConfig';\nexport * from './src/planning/gameAmountConfig/mapper';\nexport * from './src/planning/gameAmountConfig/service';\nexport * from './src/planning/gameAmountConfig/json';\nexport * from './src/planning/gameMode';\nexport * from './src/poule';\nexport * from './src/poule/against';\nexport * from './src/poule/horizontal';\nexport * from './src/poule/json';\nexport * from './src/poule/mapper';\nexport * from './src/poule/structure';\nexport * from './src/poule/structure/balanced';\nexport * from './src/qualify/againstConfig';\nexport * from './src/qualify/againstConfig/json';\nexport * from './src/qualify/againstConfig/mapper';\nexport * from './src/qualify/againstConfig/service';\nexport * from './src/qualify/distribution';\nexport * from './src/qualify/group';\nexport * from './src/qualify/pathNode/mapper'; \nexport * from './src/qualify/reservationservice';\nexport * from './src/qualify/rule/horizontal';\nexport * from './src/qualify/rule/horizontal/multiple';\nexport * from './src/qualify/rule/horizontal/single';\nexport * from './src/qualify/rule/vertical';\nexport * from './src/qualify/rule/vertical/multiple';\nexport * from './src/qualify/rule/vertical/single';\nexport * from './src/qualify/service';\nexport * from './src/qualify/target';\nexport * from './src/qualify/pathNode';\nexport * from './src/range';\nexport * from './src/ranking/calculator/cumulative';\nexport * from './src/ranking/calculator/end';\nexport * from './src/ranking/calculator/round';\nexport * from './src/ranking/calculator/round/sport/against';\nexport * from './src/ranking/calculator/round/sport/together';\nexport * from './src/ranking/item/end';\nexport * from './src/ranking/item/round';\nexport * from './src/place/sportPerformance';\nexport * from './src/ranking/item/round/sport';\nexport * from './src/ranking/pointsCalculation';\nexport * from './src/ranking/againstRuleSet';\nexport * from './src/referee';\nexport * from './src/referee/mapper';\nexport * from './src/referee/json';\nexport * from './src/referee/self';\nexport * from './src/round/number';\nexport * from './src/round/mapper';\nexport * from './src/round/json';\nexport * from './src/round/number/mapper';\nexport * from './src/round/number/json';\nexport * from './src/season';\nexport * from './src/season/mapper';\nexport * from './src/season/json';\nexport * from './src/score';\nexport * from './src/score/against';\nexport * from './src/score/againstHelper';\nexport * from './src/score/config';\nexport * from './src/score/config/json';\nexport * from './src/score/config/mapper';\nexport * from './src/score/config/service';\nexport * from './src/score/direction';\nexport * from './src/score/mapper';\nexport * from './src/score/together';\nexport * from './src/sport';\nexport * from './src/sport/mapper';\nexport * from './src/sport/json';\nexport * from './src/sport/football';\nexport * from './src/sport/variant/single';\nexport * from './src/sport/variant/against';\nexport * from './src/sport/variant/against/h2h';\nexport * from './src/sport/variant/against/gamesPerPlace';\nexport * from './src/sport/variant/allInOneGame';\nexport * from './src/sport/variant/json';\nexport * from './src/sport/variant/withFields';\nexport * from './src/sport/variant/withPoule/equallyAssignCalculator';\nexport * from './src/structure';\nexport * from './src/structure/cell';\nexport * from './src/structure/editor';\nexport * from './src/structure/location/mapper';\nexport * from './src/structure/mapper';\nexport * from './src/structure/json';\nexport * from './src/structure/placeRanges';\nexport * from './src/structure/nameService';\nexport * from './src/team';\nexport * from './src/team/mapper';\nexport * from './src/team/player';\nexport * from './src/team/player/json';\nexport * from './src/team/player/mapper';\nexport * from './src/ngx-sport.module';\n// export { registerLocaleData as ɵregisterLocaleData } from './src/i18n/locale_data';\n\n// tmp\n// export * from './test/helpers/structureOutput';\n\n// This file only reexports content of the `src` folder. Keep it that way.\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.PlaceMapper","i1.PouleMapper","i2.ScoreConfigMapper","i3.AgainstQualifyConfigMapper","i1.StructureCellMapper","i2.RoundMapper","i1.AssociationMapper","i1.SportMapper","i2.FieldMapper","i1.TeamMapper","i1.LeagueMapper","i2.SeasonMapper","i3.RefereeMapper","i4.CompetitionSportMapper","i5.TeamCompetitorMapper","i1.ScoreConfigService","i2.GameAmountConfigService","i3.AgainstQualifyConfigService","i1.ScoreMapper","i1.QualifyPathNodeMapper","i1.GamePlaceMapper","i4.ScoreMapper","i5.StructureLocationMapper","i2.PlayerMapper","i1.GameMapper","i1.PlanningConfigMapper","i2.GameAmountConfigMapper","i1.CompetitionSportEditor","i2.PlanningConfigMapper","i1.CompetitionSportMapper","i2.RoundNumberMapper","i3.CategoryMapper","i4.PlanningMapper"],"mappings":"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"}