<?php

error_reporting(-1);
mb_internal_encoding("utf-8");
class Employee
{
    public $name;               // имя-фамилия
    public $rate;               // часовая ставка (сколько он получает тугриков за час работы)
    public $hours = array();    // массив, содержащий отработанные часы по неделям

    public function __construct($name, $rate)
    {
        // задаем имя и часовую ставку
        $this->name = $name;
        $this->rate = $rate;
    }

    /** Считает общее число отработанных часов */
    public function getTotalHoursWorked()
    {
        // Просто складываем значения часов в массиве
        return array_sum($this->hours);
    }

    /** Считает зарплату */
    public function getSalary()
    {
        // Получаем число отработанных часов
        $normalHours = $this->getNormalHours();
        $overHours = $this->getOvertimeHours();
        // и умножаем на часовую ставку
        $salary = $normalHours * $this->rate + $overHours * ($this->rate * 2);
        return $salary;
    }

    public function getOvertimeHours(){
        // Количество часов по обычной ставке
        $normalHours = 40;
        // Количетсво переработанных часов
        $overHours = 0;
        foreach($this->hours as $weekHours){
            // Если отработанных часов больше нормы
            if($weekHours>$normalHours){
                // Считаем переработанные часы
                $overHours=$overHours+($weekHours-$normalHours);
            }
        }
        return $overHours;
    }

    public function getNormalHours(){
        // Высчитываем количество часов по обычной ставке
        return $this->getTotalHoursWorked()-$this->getOvertimeHours();;
    }

    public function getShortName(){
        // Ищем с конца буквы до заглавной и заменяем их на "."
        $shortName = preg_replace("/[a-zа-яё]+$/u",".",$this->name);
        return $shortName;
    }
}


function padRight($string,$length){
    $space="";

    $length=$length-mb_strlen($string);
    for($i = 0;$i < $length; $i++){
        $space=$space." " ;
    }
    return $string.$space;
}

function padLeft($string,$length){
    $space="";

    // Вычитаем длину строки из колонки
    $length = $length - mb_strlen($string)+2;

    for ($i = 0; $i < $length; $i++) {
        $space = $space . " ";
    }
    $result = $space . $string;
    return $result;
}


$ivan = new Employee("Иванов Иван", 10);
// name и rate заданы через конструктор, потому осталось лишь написать часы
$ivan->hours = array(40, 40, 40, 40);   // Иван работает по 40 часов в неделю

$peter = new Employee("Петров Петр", 8);
$peter->hours = array(40, 10, 40, 50);  // Петр взял отгул и потому отработал меньше часов, 
// но в  последнюю неделю решил поработать побольше

$employees = array($ivan, $peter);

// Ширина колонок
$col1 = 30;
$col2 = 8;
$col3 = 8;
$col4 = 8;
$col5 = 8;

// Заголовок таблицы
echo padRight("Сотрудник", $col1) .
    padLeft("Часы", $col2) .
    padLeft("Овертайм", $col3) .
    padLeft("Ставка", $col4) .
    padLeft("З/п", $col5) . "\n";

// Сама таблица
$overTotal = 0;
$hoursTotal = 0;
$salaryTotal = 0;
foreach ($employees as $employee) {
    echo padRight($employee->getShortName(), $col1) .
        padLeft($employee->getTotalHoursWorked(), $col2) .
        padLeft($employee->getOvertimeHours(),$col3).
        padLeft($employee->rate, $col4) .
        padLeft($employee->getSalary(), $col5) . "\n";
    $overTotal += $employee->getOvertimeHours();
    $hoursTotal += $employee->getTotalHoursWorked();
    $salaryTotal += $employee->getSalary();
}
echo padRight("Всего", $col1) .
    padLeft($hoursTotal, $col2) .
    padLeft($overTotal,$col3).
    padLeft(" ", $col4) .
    padLeft($salaryTotal, $col5) . "\n";



