<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;
use Payum\Core\Model\Payment as BasePayment;
use Ramsey\Uuid\Doctrine\UuidGenerator;

/**
 * @ORM\Entity(repositoryClass="App\Repository\PaymentRepository")
 * @ORM\Table(name="payment")
 */
class Payment extends BasePayment
{
    const TYPE_ACHAT_MONNAIE_ADHERENT = 'achat_monnaie_adherent';
    const TYPE_ACHAT_MONNAIE_PRESTA = 'achat_monnaie_presta';
    const TYPE_COTISATION_ADHERENT = 'cotisation_adherent';
    const TYPE_COTISATION_PRESTA = 'cotisation_presta';
    const TYPE_ADHESION = 'adhesion';
    const TYPE_PAIEMENT_COTISATION_TAV = 'paiement_cotisation_tav';
    const TYPE_PAIEMENT_RECURRENT_COTISATION_TAV = 'paiement_recurrent_cotisation_tav';

    // todo : new field pour donnes d'abonnement

    /**
     * @var \Ramsey\Uuid\UuidInterface
     *
     * @ORM\Id
     * @ORM\Column(type="uuid", unique=true)
     * @ORM\GeneratedValue(strategy="CUSTOM")
     * @ORM\CustomIdGenerator(class=UuidGenerator::class)
     */
    protected $id;

    /**
     * @var string|null
     *
     * @ORM\Column(type="string", length=50, nullable=true)
     */
    protected $status;

    /**
     * @var string|null
     *                  JSON array of 'Flux' to persist if payment valid
     *
     * @ORM\Column(type="text", nullable=true)
     */
    protected $flux_data;

    /**
     * @var string|null
     *                  Extra data to persist if payment valid
     *
     * @ORM\Column(type="text", nullable=true)
     */
    protected $extra_data;

    /**
     * @ORM\Column(type="boolean", options={"default" : false})
     */
    private $isRecurrent;

    /**
     * @ORM\Column(type="integer", nullable=true)
     */
    private $recurrenceMonthsCount;

    /**
     * @ORM\Column(type="integer", nullable=true)
     */
    private $recurrenceMonthDay;

    /**
     * @ORM\Column(type="integer", nullable=true)
     */
    private $recurrenceAmount;

    /**
     * @return string
     */
    public function getStatus(): ?string
    {
        return $this->status;
    }

    /**
     * @param string $status
     *
     * @return Payment
     */
    public function setStatus(string $status): self
    {
        $this->status = $status;

        return $this;
    }

    /**
     * @return string
     */
    public function getFluxData(): ?string
    {
        return $this->flux_data;
    }

    /**
     * @param string $flux_data
     *
     * @return Payment
     */
    public function setFluxData(string $flux_data): self
    {
        $this->flux_data = $flux_data;

        return $this;
    }

    /**
     * @return string
     */
    public function getExtraData(): ?string
    {
        return $this->extra_data;
    }

    /**
     * @param string $extra_data
     *
     * @return Payment
     */
    public function setExtraData(string $extra_data): self
    {
        $this->extra_data = $extra_data;

        return $this;
    }

    public function getIsRecurrent(): ?bool
    {
        return $this->isRecurrent;
    }

    public function setIsRecurrent(bool $isRecurrent): self
    {
        $this->isRecurrent = $isRecurrent;

        return $this;
    }

    public function getRecurrenceMonthsCount(): ?int
    {
        return $this->recurrenceMonthsCount;
    }

    public function setRecurrenceMonthsCount(?int $recurrenceMonthsCount): self
    {
        $this->recurrenceMonthsCount = $recurrenceMonthsCount;

        return $this;
    }

    public function getRecurrenceMonthDay(): ?int
    {
        return $this->recurrenceMonthDay;
    }

    public function setRecurrenceMonthDay(?int $recurrenceMonthDay): self
    {
        $this->recurrenceMonthDay = $recurrenceMonthDay;

        return $this;
    }

    public function getRecurrenceAmount(): ?int
    {
        return $this->recurrenceAmount;
    }

    public function setRecurrenceAmount(?int $recurrenceAmount): self
    {
        $this->recurrenceAmount = $recurrenceAmount;

        return $this;
    }
}
