class Continent {
    constructor(name) {
        this.name = name;
        this.yield = 0;
    }
}

const REGIONS = {};

class Region {
    constructor(name, continent) {
        this.name = name;
        this.owner = null;
        this.strength = 0;
        this.neighbours = new Set();
        this.continent = continent;

        REGIONS[name] = this;
    }

    static setNeighbours(region1, region2) {
        region1.neighbours.add(region2);
        region2.neighbours.add(region1);
    }

    static getRegion(name) {
        return REGIONS[name];
    }

    claim(player) {
        this.owner = player;
        this.strength = 1;
    }

    reinforce(amount) {
        this.strength += amount;
    }
}

const EAST = new Continent("East");
const WEST = new Continent("West");

const A = new Region("A", EAST);
const B = new Region("B", EAST);
const C = new Region("C", EAST);
const D = new Region("D", EAST);
const J = new Region("J", EAST);

const F = new Region("F", WEST);
const G = new Region("G", WEST);
const H = new Region("H", WEST);
const I = new Region("I", WEST);
const E = new Region("E", WEST);

function allRegionsClaimed() {
    return Object.values(REGIONS).find((region) => region.owner === null) === undefined;
}

let allPlaced = false;

// In standard Risk, this is 5
const _REINFORCEMENT_MULTIPLIER = 1;

function reinforcementsRemaining() {
    if (allPlaced) {
        return 0;
    } else {
        let totalStrength = Object.values(REGIONS)
            .filter((region) => region.owner === us)
            .reduce((counter, region) => counter + region.strength, 0);
        let numPlayers = Object.values(players).length;

        return _REINFORCEMENT_MULTIPLIER * (10 - numPlayers) - totalStrength;
    }
}

function allReinforcementsPlaced() {
    if (allPlaced) {
        return true;
    } else {
        let totalStrength = Object.values(REGIONS).reduce(
            (counter, region) => counter + region.strength,
            0
        );
        let numPlayers = Object.values(players).length;

        allPlaced =
            totalStrength >= numPlayers * _REINFORCEMENT_MULTIPLIER * (10 - numPlayers);
        return allPlaced;
    }
}
