<?php

namespace App\Entity;

use App\Enum\CurrencyEnum;
use App\Utils\OperationFactory;
use Doctrine\ORM\Mapping as ORM;

/**
 * En cas de taux < 1, l'adhérent•e reçoit moins d'emlc que ce qu'elle•il paye en € :
 * un second flux est créé pour prélever le complément de la cotisation.
 *
 * @ORM\Entity
 */
class TauxCotisationPrelevement extends TauxCotisationApplication
{
    /**
     * @ORM\OneToOne(targetEntity="Adherent")
     * @ORM\JoinColumn(name="adherent_id", referencedColumnName="id")
     */
    protected $expediteur;

    /**
     * @ORM\OneToOne(targetEntity="Siege")
     * @ORM\JoinColumn(name="siege_id", referencedColumnName="id")
     */
    protected $destinataire;

    public function getAllOperations($em)
    {
        return [
            OperationFactory::getOperation($this, $this->getExpediteur(), CurrencyEnum::CURRENCY_EMLC, -$this->getMontant()),
            OperationFactory::getOperation($this, $this->getDestinataire(), CurrencyEnum::CURRENCY_EMLC, -$this->getMontant()),  // Decrease siege ecompte too
        ];
    }

    public function operate($em)
    {
        $this->getDestinataire()->removeEcompteNantie($this->getMontant());
        $this->getExpediteur()->removeEcompte($this->getMontant());

        return [$this->getExpediteur(), $this->getDestinataire()];
    }

    /**
     * @return string
     */
    public function getType(): string
    {
        return parent::TYPE_PRELEVEMENT_COTISATION_ADHERENT;
    }

    public function getUsersToNotify()
    {
        return [];
    }
}
