<?php
namespace Medienreaktor\Persons\Domain\Model;

/***
 *
 * This file is part of the "Persons" Extension for TYPO3 CMS.
 *
 * For the full copyright and license information, please read the
 * LICENSE.txt file that was distributed with this source code.
 *
 *  (c) 2018
 *
 ***/

/**
 * Company
 */
class Company extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity
{
    /**
     * title
     *
     * @var string
     */
    protected $title = '';

    /**
     * description
     *
     * @var string
     */
    protected $description = '';

    /**
     * image
     *
     * @var \TYPO3\CMS\Extbase\Domain\Model\FileReference
     */
    #[\TYPO3\CMS\Extbase\Annotation\ORM\Cascade(['value' => 'remove'])]
    protected $image = null;

    /**
     * phone
     *
     * @var string
     */
    protected $phone = '';

    /**
     * fax
     *
     * @var string
     */
    protected $fax = '';

    /**
     * mail
     *
     * @var string
     */
    protected $mail = '';

    /**
     * departments
     *
     * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Medienreaktor\Persons\Domain\Model\Department>
     */
    protected $departments = null;

    /**
     * persons
     *
     * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Medienreaktor\Persons\Domain\Model\Person>
     */
    protected $persons = null;

    /**
     * addresses
     *
     * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Medienreaktor\Persons\Domain\Model\Address>
     */
    #[\TYPO3\CMS\Extbase\Annotation\ORM\Cascade(['value' => 'remove'])]
    protected $addresses = null;

    /**
     * organisation
     *
     * @var \Medienreaktor\Persons\Domain\Model\Organisation
     */
    protected $organisation = null;

    /**
     * locations
     *
     * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Medienreaktor\Persons\Domain\Model\Location>
     */
    protected $locations = null;

    /**
     * mainAddress
     *
     * @var \Medienreaktor\Persons\Domain\Model\Address
     */
    protected $mainAddress = null;

    /**
     * __construct
     */
    public function __construct()
    {
        //Do not remove the next line: It would break the functionality
        $this->initStorageObjects();
    }

    /**
     * Initializes all ObjectStorage properties
     * Do not modify this method!
     * It will be rewritten on each save in the extension builder
     * You may modify the constructor of this class instead
     *
     * @return void
     */
    protected function initStorageObjects()
    {
        $this->departments = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage();
        $this->persons = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage();
        $this->addresses = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage();
        $this->locations = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage();
    }

    /**
     * Returns the title
     *
     * @return string $title
     */
    public function getTitle()
    {
        return $this->title;
    }

    /**
     * Sets the title
     *
     * @param string $title
     * @return void
     */
    public function setTitle($title): void
    {
        $this->title = $title;
    }

    /**
     * Returns the description
     *
     * @return string $description
     */
    public function getDescription()
    {
        return $this->description;
    }

    /**
     * Sets the description
     *
     * @param string $description
     * @return void
     */
    public function setDescription($description): void
    {
        $this->description = $description;
    }

    /**
     * Returns the image
     *
     * @return \TYPO3\CMS\Extbase\Domain\Model\FileReference $image
     */
    public function getImage()
    {
        return $this->image;
    }

    /**
     * Sets the image
     *
     * @param \TYPO3\CMS\Extbase\Domain\Model\FileReference $image
     * @return void
     */
    public function setImage(\TYPO3\CMS\Extbase\Domain\Model\FileReference $image): void
    {
        $this->image = $image;
    }

    /**
     * Returns the phone
     *
     * @return string $phone
     */
    public function getPhone()
    {
        return $this->phone;
    }

    /**
     * Sets the phone
     *
     * @param string $phone
     * @return void
     */
    public function setPhone($phone): void
    {
        $this->phone = $phone;
    }

    /**
     * Returns the fax
     *
     * @return string $fax
     */
    public function getFax()
    {
        return $this->fax;
    }

    /**
     * Sets the fax
     *
     * @param string $fax
     * @return void
     */
    public function setFax($fax): void
    {
        $this->fax = $fax;
    }

    /**
     * Returns the mail
     *
     * @return string $mail
     */
    public function getMail()
    {
        return $this->mail;
    }

    /**
     * Sets the mail
     *
     * @param string $mail
     * @return void
     */
    public function setMail($mail): void
    {
        $this->mail = $mail;
    }

    /**
     * Returns the mainAddress
     *
     * @return \Medienreaktor\Persons\Domain\Model\Address $mainAddress
     */
    public function getMainAddress()
    {
        return $this->mainAddress;
    }

    /**
     * Sets the mainAddress
     *
     * @param \Medienreaktor\Persons\Domain\Model\Address $mainAddress
     * @return void
     */
    public function setMainAddress(\Medienreaktor\Persons\Domain\Model\Address $mainAddress): void
    {
        $this->mainAddress = $mainAddress;
    }

    /**
     * Adds a Department
     *
     * @param \Medienreaktor\Persons\Domain\Model\Department $department
     * @return void
     */
    public function addDepartment($department): void
    {
        $this->departments->attach($department);
    }

    /**
     * Removes a Department
     *
     * @param \Medienreaktor\Persons\Domain\Model\Department $departmentToRemove The Department to be removed
     * @return void
     */
    public function removeDepartment($departmentToRemove): void
    {
        $this->departments->detach($departmentToRemove);
    }

    /**
     * Returns the departments
     *
     * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Medienreaktor\Persons\Domain\Model\Department> departments
     */
    public function getDepartments()
    {
        return $this->departments;
    }

    /**
     * Sets the departments
     *
     * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Medienreaktor\Persons\Domain\Model\Department> $departments
     * @return void
     */
    public function setDepartments(\TYPO3\CMS\Extbase\Persistence\ObjectStorage $departments): void
    {
        $this->departments = $departments;
    }

    /**
     * Adds a Person
     *
     * @param \Medienreaktor\Persons\Domain\Model\Person $person
     * @return void
     */
    public function addPerson($person): void
    {
        $this->persons->attach($person);
    }

    /**
     * Removes a Person
     *
     * @param \Medienreaktor\Persons\Domain\Model\Person $personToRemove The Person to be removed
     * @return void
     */
    public function removePerson($personToRemove): void
    {
        $this->persons->detach($personToRemove);
    }

    /**
     * Returns the persons
     *
     * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Medienreaktor\Persons\Domain\Model\Person> persons
     */
    public function getPersons()
    {
        return $this->persons;
    }

    /**
     * Sets the persons
     *
     * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Medienreaktor\Persons\Domain\Model\Person> $persons
     * @return void
     */
    public function setPersons(\TYPO3\CMS\Extbase\Persistence\ObjectStorage $persons): void
    {
        $this->persons = $persons;
    }

    /**
     * Adds a
     *
     * @param \Medienreaktor\Persons\Domain\Model\Address $address
     * @return void
     */
    public function addAddress($address): void
    {
        $this->addresses->attach($address);
    }

    /**
     * Removes a
     *
     * @param \Medienreaktor\Persons\Domain\Model\Address $addressToRemove The Address to be removed
     * @return void
     */
    public function removeAddress($addressToRemove): void
    {
        $this->addresses->detach($addressToRemove);
    }

    /**
     * Returns the addresses
     *
     * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Medienreaktor\Persons\Domain\Model\Address> addresses
     */
    public function getAddresses()
    {
        return $this->addresses;
    }

    /**
     * Sets the addresses
     *
     * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Medienreaktor\Persons\Domain\Model\Address> $addresses
     * @return void
     */
    public function setAddresses(\TYPO3\CMS\Extbase\Persistence\ObjectStorage $addresses): void
    {
        $this->addresses = $addresses;
    }

    /**
     * Returns the organisation
     *
     * @return \Medienreaktor\Persons\Domain\Model\Organisation organisation
     */
    public function getOrganisation()
    {
        return $this->organisation;
    }

    /**
     * Sets the organisation
     *
     * @param string $organisation
     * @return void
     */
    public function setOrganisation($organisation): void
    {
        $this->organisation = $organisation;
    }

    /**
     * Adds a
     *
     * @param \Medienreaktor\Persons\Domain\Model\Location $location
     * @return void
     */
    public function addLocation($location): void
    {
        $this->locations->attach($location);
    }

    /**
     * Removes a
     *
     * @param \Medienreaktor\Persons\Domain\Model\Location $locationToRemove
     * @return void
     */
    public function removeLocation($locationToRemove): void
    {
        $this->locations->detach($locationToRemove);
    }

    /**
     * Returns the locations
     *
     * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Medienreaktor\Persons\Domain\Model\Location> locations
     */
    public function getLocations()
    {
        return $this->locations;
    }

    /**
     * Sets the locations
     *
     * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Medienreaktor\Persons\Domain\Model\Location> $locations
     * @return void
     */
    public function setLocations(\TYPO3\CMS\Extbase\Persistence\ObjectStorage $locations): void
    {
        $this->locations = $locations;
    }
}
