Text this: Addressing the principal-agent problem in public private partnerships via mixed-integer bi-level linear programming