<?php

class Vector
{
    public $employees;
    public $salary;
    public $coffee;
    public $pages;
    
    private function countAll($qt, $rank, $salary, $coffee, $pages) {
        switch($rank) {
            case 1:
                $salary *= $qt;
                break;
            case 2:
                $salary += $salary*0.25;
                $salary *= $qt;
                break;
            case 3:
                $salary += $salary*0.5;
                $salary *= $qt;
                break;
            case 'leader':
                $salary += $salary*0.5;
                $coffee *= 2;
                $pages = 0;
        }
        $coffee *= $qt;
        $pages *= $qt;
        $results = [
            "employees" => $qt,
            "salary" => $salary,
            "coffee" => $coffee,
            "pages" => $pages
        ];
        return $results;
    }
    private function definePost($qt, $post, $rank) { //Определяет должность
        switch($post) {
            case 'ме': //Менеджер
                $salary = 500;
                $coffee = 20;
                $pages = 200;
                $results = $this->countAll($qt, $rank, $salary, $coffee, $pages);
                return $results;
            case 'ма': //Маркетолог
                $salary = 400;
                $coffee = 15;
                $pages = 150;
                $results = $this->countAll($qt, $rank, $salary, $coffee, $pages);
                return $results; 
            case 'ин': //Инженер
                $salary = 200;
                $coffee = 5;
                $pages = 50;
                $results = $this->countAll($qt, $rank, $salary, $coffee, $pages);
                return $results; 
            case 'ан': //Аналитик
                $salary = 800;
                $coffee = 50;
                $pages = 5;
                $results = $this->countAll($qt, $rank, $salary, $coffee, $pages);
                return $results;
        } 
    }
    private function splitQtPostRank($qtPostRank) {
        $qt = preg_split('/х?ме|ма|ин|ан/u', $qtPostRank);
        if($qt[0] == "") {
            $qt[0] = 1;
        }
        $rank = $qt[1]; //Ранг
        $qt = $qt[0]; //Кол-во
        $pattern = ["/[0-9]/u", "/х/u"];
        $post = preg_filter($pattern, "",$qtPostRank); //Должность
        $qtPostRank = ["qt" => $qt, "post" => $post, "rank" => $rank];
        return $qtPostRank;
    }
    public function __construct($department) {
        $employeesTotal = 0;
        $salaryTotal = 0;
        $coffeeTotal = 0;
        $pagesTotal = 0;
        $results = [];
        $i = 0;
        foreach($department as $qtPostRank) {
            if(!preg_match('/([0-9]+)?+х?ме|ма|ин|ан[1-3]/u', $qtPostRank)) { //Проверка на соответствие шаблону
                die("Указанный параметр - неверный");
            }
            $qtPostRank = $this->splitQtPostRank($qtPostRank);
            $qt = $qtPostRank["qt"];
            $post = $qtPostRank["post"];
            $rank = $qtPostRank["rank"];
            $i++;
            if($i == count($department)-1) { //проверка на руководителя
                $rank = 'leader';
            }
            $results = $this->definePost($qt, $post, $rank);
            $employeesTotal += $results["employees"];
            $salaryTotal += $results["salary"];
            $coffeeTotal += $results["coffee"];
            $pagesTotal += $results["pages"];
        }
        $this->employees = $employeesTotal;
        $this->salary = $salaryTotal;
        $this->coffee = $coffeeTotal;
        $this->pages = $pagesTotal;
    }
}
//Предполагается, что последний элемент массива всегда руководитель департамента,
//Департамент не может существовать без руководителя
$purchaseDepartment = ['9хме1', '3хме2', '2хме3', 'ме2'];
$sellingDepartment = ['12хме1','6хма1','3хан1','2хан2','ма2'];
$advertisementDepartment = ['15хма1', '10хма2', '8хме1', '2хин1', 'ма3'];
$logisticsDepartment = ['13хме1','5хме2','5хин1','ме1'];
$departments = [
    'Закупок' => $purchaseDepartment,
    'Продаж' => $sellingDepartment,
    'Рекламы' => $advertisementDepartment,
    'Логистики' => $logisticsDepartment
];
$total = [
    'employees' => 0,
    'salary' => 0,
    'coffee' => 0,
    'pages' => 0,
    'tugrPerPage' => 0
];
$avrg = [
    'employees' => 0,
    'salary' => 0,
    'coffee' => 0,
    'pages' => 0,
    'tugrPerPage' => 0
];
//Вывод
foreach($departments as $name => $composition) { 
    $composition = new Vector($composition);
    $tugrPerPage = round($composition->salary / $composition->pages, 2);
    $total['employees'] += $composition->employees;
    $total['salary'] += $composition->salary;
    $total['coffee'] += $composition->salary;
    $total['pages'] += $composition->pages;
    $total['tugrPerPage'] += $tugrPerPage;
    echo "\nДепартамент {$name}\n---------------------------\n";
    echo "Сотрудников: {$composition->employees}\n";
    echo "Тугриков: {$composition->salary}\n";
    echo "Кофе: {$composition->coffee}\n";
    echo "Страниц: {$composition->pages}\n";
    echo "Тугриков на страницу: {$tugrPerPage}\n";
}
$avrg['employees'] = round($total['employees']/count($departments), 2);
$avrg['salary'] = round($total['salary']/count($departments),2);
$avrg['coffee'] = round($total['coffee']/count($departments),2);
$avrg['pages'] = round($total['pages']/count($departments),2);
$avrg['tugrPerPage'] = round($total['tugrPerPage']/count($departments),2);

echo "\nВсего\n---------------------------\n";
echo "Сотрудников: {$total['employees']}\n";
echo "Тугриков: {$total['salary']}\n";
echo "Кофе: {$total['coffee']}\n";
echo "Страниц: {$total['pages']}\n";
echo "Тугриков на страницу: {$total['tugrPerPage']}\n";

echo "\nСреднее\n---------------------------\n";
echo "Сотрудников: {$avrg['employees']}\n";
echo "Тугриков: {$avrg['salary']}\n";
echo "Кофе: {$avrg['coffee']}\n";
echo "Страниц: {$avrg['pages']}\n";
echo "Тугриков на страницу: {$avrg['tugrPerPage']}\n";
