# a2.py
# Prof. Lillian Lee (LJL2)
# Feb 27, 2018

""" Code for A2 diagramming exercise."""

from player import Player


def change(p, delta):
    """Adds delta to p's holdings unless doing so would make p's holdings
        negative, in which case nothing is added.
        Returns True if adding delta keeps p's holdings non-negative, False o.w.

    p is a Player.
    delta is an int, possibly negative or zero."""

    if delta < -p.holdings:
        return False
    else:
        p.holdings = p.holdings + delta
        return True


def redistr(p1, contrib1, p2, contrib2, factor):
    """Play a public goods game.

    Players p1 and p2 contribute contrib1 and contrib2 tokens, respectively,
    with the pot multiplied by `factor` before fair division between p1 and p2
    (truncated to an int).

    However, no change is made to if p1's holdings are less than contrib1 or
    p2's holdings are less than contrib2.

    p1 and p2 are Players.
    contrib1 and contrib2 are non-negative ints.
    factor is a positive float between 1 and 2 exclusive.
    """
    if not change(p1, -contrib1):
        return
    elif not change(p2, -contrib2):
        change(p1, contrib1)
        return

    get_back = int((contrib1+contrib2)*factor/2) # float division
    change(p1, get_back)
    change(p2, get_back)


p1 = Player(20)
p2 = Player(30)
p3 = Player(2)
redistr(p1, 4, p2, 6, 1.5)
redistr(p3, 2, p1, 30, 1.7)