<?php

error_reporting(-1);

class Company
{
	private $departments = array();
	
	public function setDepartments($departments)
	{
		$this->departments = $departments;
	}
	
}

class Department
{
	private $employees = array();
	
	public function setEmployees($employees)
	{
		$this->employees = $employees;
	}
	
	public function getTotalSalary()
	{
		$totalSalary = 0;
		
		foreach($this->employees as $employee) {
			$totalSalary += $employee->getSalary();
		}
		return $totalSalary;
	}
	
	public function getTotalDrunkCofee()
	{
		$totalDrunkCofee = 0;
		
		foreach($this->employees as $employee) {
			$totalDrunkCofee += $employee->getDrunkCofee();
		}
		return $totalDrunkCofee;
	}
}

abstract class AbstractEmployee
{
	private $baseRate;
	private $rank;
	private $isBoss;
	
	abstract function getSalary();
	abstract function getDrunkCofee();
}

class Employee extends AbstractEmployee
{
	public function __construct($rank, $isBoss = false)
	{
		$this->rank = $rank;
		$this->isBoss = $isBoss;
	}
	
	public function getSalary()
	{
		$salary = 0;
		
		if($this->rank == 1) {
			$salary = $this->baseRate;
		} elseif($this->rank == 2) {
			$salary = $this->baseRate * 1.25;
		} elseif($this->rank == 3) {
			$salary = $this->baseRate * 1.5;
		}
		
		if($this->isBoss) {
			$salary *= 1.5;
		}
		
		return $salary;
	}
	
	public function getDrunkCofee()
	{
		return 'nothing'; //заглушка
	}
}

class Manager extends Employee
{
	protected $baseRate = 500;
	
	public function getDrunkCofee()
	{
		$cofee = 20;
		
		if($this->isBoss) {
			$cofee *= 2;
		}
		
		return $cofee;
	}
}

class Engineer extends Employee
{
	protected $baseRate = 200;
	
	public function getDrunkCofee()
	{
		$cofee = 5;
		
		if($this->isBoss) {
			$cofee *= 2;
		}
		return $cofee;
	}
	
}

class Analyst extends Employee
{
	protected $baseRate = 800;
	
	public function getDrunkCofee()
	{
		$cofee = 50;
		
		if($this->isBoss) {
			$cofee *= 2;
		}
		return $cofee;
	}
}

class Marketer extends Employee
{
	protected $baseRate = 400;
	
	public function getDrunkCofee()
	{
		$cofee = 15;
		
		if($this->isBoss) {
			$cofee *= 2;
		}
		return $cofee;
	}
}



function controller()
{
	$dep1 = new Department;
	$emps = array();
	for($i = 0; $i <= 9; $i++) {
		$emps[] = new Manager(3);
	}
	$emps[] = new Analyst(2, true);
	$dep1->setEmployees($emps);
	print_r($dep1);
	echo "Всего выдано зп:" . $dep1->getTotalSalary() . "\n";
	echo "Всего выпито кофе: " . $dep1->getTotalDrunkCofee() . "\n";
}

controller();
