<?php

class Employee
{
    public $isChief;
    public $rank;

    public function __construct($isChief, $rank)
    {
        $this->isChief = $isChief;
        $this->rank = $rank;

        if ($isChief == 1) {
            $this->coffeeConsumption *= 2;
            $this->paperConsumption = 0;
        }
    }
    public function getSalary()
    {
        $salary = $this->baseRate;
        if ($this->rank == 2) {
            $salary *= 1.25;
        } elseif ($this->rank == 3) {
            $salary *= 1.5;
        }
        if ($this->isChief == 1) {
            $salary *= 1.5;
        }
        return $salary;
    }
}

class Manager extends Employee
{
    public $baseRate = 500;
    public $coffeeConsumption = 20;
    public $paperConsumption = 200;
}

class Marketing extends Employee
{
    public $baseRate = 400;
    public $coffeeConsumption = 15;
    public $paperConsumption = 150;
}

class Engineer extends Employee
{
    public $baseRate = 200;
    public $coffeeConsumption = 5;
    public $paperConsumption = 50;
}

class Analyst extends Employee
{
    public $baseRate = 800;
    public $coffeeConsumption = 50;
    public $paperConsumption = 5;
}

class Department
{
    public $name;
    public $employees;

    public function __construct ($name, $employees)
    {
        $this->name = $name;
        $this->employees = $employees;
    }
    public function getEmployeesCount()
    {
        return count($this->employees);
    }
    public function getEmployeesSalary()
    {
        $employeesSalary = 0;
        foreach ($this->employees as $employee) {
            $employeesSalary += $employee->getSalary();
        }
        return $employeesSalary;
    }
    public function getConsumptionOfCoffee()
    {
        $consumptionOfCoffee = 0;
        foreach ($this->employees as $employee) {
            $consumptionOfCoffee += $employee->coffeeConsumption;
        }
        return $consumptionOfCoffee;
    }
    public function getPaperConsumption()
    {
        $paperConsumption = 0;
        foreach ($this->employees as $employee) {
            $paperConsumption += $employee->paperConsumption;
        }
        return $paperConsumption;
    }
    public function getCostPerPage()
    {
        return round($this->getEmployeesSalary() / $this->getPaperConsumption(), 2);
    }
}

function generateEmployeesList ($name, $isChief, $rank, $count, $employees)
{
    for ($i = 0; $i < $count; ++$i) {
        $employees[] = new $name($isChief, $rank);
    }
    return $employees;
}

//Создаем департаменты
$employees = array();
$employees = generateEmployeesList('Manager', 0, 1, 9, $employees);
$employees = generateEmployeesList('Manager', 0, 2, 3, $employees);
$employees = generateEmployeesList('Manager', 0, 3, 2, $employees);
$employees = generateEmployeesList('Marketing', 0, 1, 2, $employees);
$employees = generateEmployeesList('Manager', 1, 2, 1, $employees);
$departmentOfProcurement = new Department('Закупок', $employees);

$employees = array();
$employees = generateEmployeesList('Manager', 0, 1, 12, $employees);
$employees = generateEmployeesList('Marketing', 0, 1, 6, $employees);
$employees = generateEmployeesList('Analyst', 0, 1, 3, $employees);
$employees = generateEmployeesList('Analyst', 0, 2, 2, $employees);
$employees = generateEmployeesList('Marketing', 1, 2, 1, $employees);
$salesDepartment = new Department('Продаж', $employees);

$employees = array();
$employees = generateEmployeesList('Marketing', 0, 1, 15, $employees);
$employees = generateEmployeesList('Marketing', 0, 2, 10, $employees);
$employees = generateEmployeesList('Manager', 0, 1, 8, $employees);
$employees = generateEmployeesList('Engineer', 0, 1, 2, $employees);
$employees = generateEmployeesList('Marketing', 1, 3, 1, $employees);
$departmentOfAdvertising = new Department('Рекламы', $employees);

$employees = array();
$employees = generateEmployeesList('Manager', 0, 1, 13, $employees);
$employees = generateEmployeesList('Manager', 0, 2, 5, $employees);
$employees = generateEmployeesList('Engineer', 0, 1, 5, $employees);
$employees = generateEmployeesList('Manager', 1, 1, 1, $employees);
$logisticDepartment = new Department('Логистики', $employees);

echo "Сотрудников " . $departmentOfProcurement->getEmployeesCount() . "\n";
echo "Зарплата " . $departmentOfProcurement->getEmployeesSalary() . "\n";
echo "Кофе " . $departmentOfProcurement->getConsumptionOfCoffee() . "\n";
echo "Страниц " . $departmentOfProcurement->getPaperConsumption() . "\n";
echo "Стоимость страницы  " . $departmentOfProcurement->getCostPerPage() . "\n";