<?php

namespace App\Entity;

use App\Repository\RevendeurRepository;
use Doctrine\ORM\Mapping as ORM;

#[ORM\Entity(repositoryClass: RevendeurRepository::class)]
class Revendeur
{
    #[ORM\Id]
    #[ORM\GeneratedValue]
    #[ORM\Column]
    private ?int $id = null;

    #[ORM\OneToOne(targetEntity: User::class)]
    #[ORM\JoinColumn(nullable: false, onDelete: 'CASCADE')]
    private User $user;

    #[ORM\Column(length: 10, unique: true)]
    private string $codeRevendeur;

    #[ORM\Column(length: 255, nullable: true)]
    private ?string $raisonSociale = null;

    #[ORM\Column(length: 14, nullable: true)]
    private ?string $siret = null;

    #[ORM\Column(length: 500, nullable: true)]
    private ?string $address = null;

    #[ORM\Column(length: 10, nullable: true)]
    private ?string $zipCode = null;

    #[ORM\Column(length: 255, nullable: true)]
    private ?string $city = null;

    #[ORM\Column(length: 255, nullable: true)]
    private ?string $email = null;

    #[ORM\Column(length: 20, nullable: true)]
    private ?string $phone = null;

    #[ORM\Column(length: 255, nullable: true)]
    private ?string $stripeConnectId = null;

    #[ORM\Column(length: 30, options: ['default' => 'not_started'])]
    private string $stripeConnectState = 'not_started';

    #[ORM\Column(length: 30, nullable: true)]
    private ?string $stripeConnectStatePayment = null;

    #[ORM\Column(length: 30, nullable: true)]
    private ?string $stripeConnectStatePayout = null;

    #[ORM\Column]
    private bool $isUseStripe = false;

    #[ORM\Column(length: 500, nullable: true)]
    private ?string $contratResellerPdfUnsigned = null;

    #[ORM\Column(length: 500, nullable: true)]
    private ?string $contratResellerPdfSigned = null;

    #[ORM\Column(length: 500, nullable: true)]
    private ?string $contratResellerPdfAudit = null;

    #[ORM\Column(nullable: true)]
    private ?int $contratSubmitterId = null;

    #[ORM\Column]
    private bool $isActive = true;

    #[ORM\Column]
    private \DateTimeImmutable $createdAt;

    #[ORM\Column(nullable: true)]
    private ?\DateTimeImmutable $updatedAt = null;

    public function __construct(User $user, string $codeRevendeur)
    {
        $this->user = $user;
        $this->codeRevendeur = $codeRevendeur;
        $this->createdAt = new \DateTimeImmutable();
    }

    public function getId(): ?int
    {
        return $this->id;
    }

    public function getUser(): User
    {
        return $this->user;
    }

    public function getCodeRevendeur(): string
    {
        return $this->codeRevendeur;
    }

    public function getRaisonSociale(): ?string
    {
        return $this->raisonSociale;
    }

    public function setRaisonSociale(?string $raisonSociale): static
    {
        $this->raisonSociale = $raisonSociale;

        return $this;
    }

    public function getSiret(): ?string
    {
        return $this->siret;
    }

    public function setSiret(?string $siret): static
    {
        $this->siret = $siret;

        return $this;
    }

    public function getAddress(): ?string
    {
        return $this->address;
    }

    public function setAddress(?string $address): static
    {
        $this->address = $address;

        return $this;
    }

    public function getZipCode(): ?string
    {
        return $this->zipCode;
    }

    public function setZipCode(?string $zipCode): static
    {
        $this->zipCode = $zipCode;

        return $this;
    }

    public function getCity(): ?string
    {
        return $this->city;
    }

    public function setCity(?string $city): static
    {
        $this->city = $city;

        return $this;
    }

    public function getEmail(): ?string
    {
        return $this->email;
    }

    public function setEmail(?string $email): static
    {
        $this->email = $email;

        return $this;
    }

    public function getPhone(): ?string
    {
        return $this->phone;
    }

    public function setPhone(?string $phone): static
    {
        $this->phone = $phone;

        return $this;
    }

    public function getStripeConnectId(): ?string
    {
        return $this->stripeConnectId;
    }

    public function setStripeConnectId(?string $stripeConnectId): static
    {
        $this->stripeConnectId = $stripeConnectId;

        return $this;
    }

    public function getStripeConnectState(): string
    {
        return $this->stripeConnectState;
    }

    public function setStripeConnectState(string $stripeConnectState): static
    {
        $this->stripeConnectState = $stripeConnectState;

        return $this;
    }

    public function getStripeConnectStatePayment(): ?string
    {
        return $this->stripeConnectStatePayment;
    }

    public function setStripeConnectStatePayment(?string $stripeConnectStatePayment): static
    {
        $this->stripeConnectStatePayment = $stripeConnectStatePayment;

        return $this;
    }

    public function getStripeConnectStatePayout(): ?string
    {
        return $this->stripeConnectStatePayout;
    }

    public function setStripeConnectStatePayout(?string $stripeConnectStatePayout): static
    {
        $this->stripeConnectStatePayout = $stripeConnectStatePayout;

        return $this;
    }

    public function isUseStripe(): bool
    {
        return $this->isUseStripe;
    }

    public function setIsUseStripe(bool $isUseStripe): static
    {
        $this->isUseStripe = $isUseStripe;

        return $this;
    }

    public function getContratResellerPdfUnsigned(): ?string
    {
        return $this->contratResellerPdfUnsigned;
    }

    public function setContratResellerPdfUnsigned(?string $path): static
    {
        $this->contratResellerPdfUnsigned = $path;

        return $this;
    }

    public function getContratResellerPdfSigned(): ?string
    {
        return $this->contratResellerPdfSigned;
    }

    public function setContratResellerPdfSigned(?string $path): static
    {
        $this->contratResellerPdfSigned = $path;

        return $this;
    }

    public function getContratResellerPdfAudit(): ?string
    {
        return $this->contratResellerPdfAudit;
    }

    public function setContratResellerPdfAudit(?string $path): static
    {
        $this->contratResellerPdfAudit = $path;

        return $this;
    }

    public function getContratSubmitterId(): ?int
    {
        return $this->contratSubmitterId;
    }

    public function setContratSubmitterId(?int $contratSubmitterId): static
    {
        $this->contratSubmitterId = $contratSubmitterId;

        return $this;
    }

    public function isActive(): bool
    {
        return $this->isActive;
    }

    public function setIsActive(bool $isActive): static
    {
        $this->isActive = $isActive;

        return $this;
    }

    public function getCreatedAt(): \DateTimeImmutable
    {
        return $this->createdAt;
    }

    public function getUpdatedAt(): ?\DateTimeImmutable
    {
        return $this->updatedAt;
    }

    public function setUpdatedAt(?\DateTimeImmutable $updatedAt): static
    {
        $this->updatedAt = $updatedAt;

        return $this;
    }
}
