<?php

class Organisation {

	private $name;
	private $departments = [];

	public function __construct($name) {
		$this->name = $name;		
	}

	public function addDepartment(Department $dep) {
 
		if (!in_array($dep, $this->departments, true)) {
			$this->departments[] = $dep;
		}
 
	}

	public function getDepartments() {
		return $this->departments;
	}

}

class Department {

	private $name;

	public function __construct($name) {
		$this->name = $name;
	}
}

class Names {
	public static function generateFullName() {
		$fLength = mt_rand(2, 6);
		$firstName = self::generateName($fLength);

		$sLength = mt_rand(2, 6);
		$secondName = self::generateName($sLength);

		return $firstName . " " . $secondName;
	}

	private static function generateName($length) {
		$syllables = [
			'а', 'и', 'у', 'о', 'е',
			'на', 'ни','ну', 'но', 'не',
			'ка', 'ки', 'ку', 'ко','ке',
			'та', 'ти', 'ту', 'то', 'те',
			'са', 'си', 'су', 'со', 'се',	
		];
		$name = '';

		for ($i = 1; $i <= $length; $i++) {
			$name .= $syllables[mt_rand(0, count($syllables)-1)];
		}
		$first = mb_strtoupper(mb_substr($name, 0, 1));
		$caseTitleName = $first . mb_substr($name, 1);

		return $caseTitleName;		
	}
}

abstract class Employee {

	private $name;
	private $rang;
	private $leader;
	private $baseSalary;
	private $baseCoffe;
	Private $basePapers;	

	public function __construct($rang, $leader, $name) {
		$this->name = $name;
		$this->rang = $rang;
		$this->leader = $leader;
	}

	public function setBaseSalary ($salary) {
		$this->$baseSalary = $salary;
	}

	public function setBaseCoffe ($coffe) {
		$this->baseCoffe = $coffe;
	}

	public function setBasePapers ($papers) {
		$this->basePapers = $papers;
	}

}


class Manager extends Employee {
	public function __construct($rang, $leader, $name) {
		parent::__construct($rang, $leader, $name);
		$this->setBaseSalary(500);
		$this->setBasePapers(200);
		$this->setBaseCoffe(20);
	}
}


$vector = new Organisation('Вектор');

$dep1 = new Department('dep1');
$vector->addDepartment($dep1);
$vector->addDepartment($dep1);
$dep2 = new Department('dep2');
$vector->addDepartment($dep2);

echo "<pre>";
//var_dump($vector->getDepartments());

$a = new Manager(1, false, Names::generateFullName());

var_dump($a);
