<?php

namespace App\Dto\Contact;

use Symfony\Component\Validator\Constraints as Assert;

/**
 * DTO (Data Transfer Object) pour le formulaire de contact.
 * Utilise des propriétés publiques sans type pour la compatibilité avec les anciennes versions de PHP/Symfony.
 * Les getters et setters sont conservés pour l'approche traditionnelle.
 */
class DtoContact
{
    /**
     * @var string
     */
    #[Assert\NotBlank(message: 'Veuillez renseigner votre prénom.')]
    #[Assert\Length(max: 50, maxMessage: 'Le prénom ne peut dépasser {{ limit }} caractères.')]
    public $name;

    /**
     * @var string
     */
    #[Assert\NotBlank(message: 'Veuillez renseigner votre nom de famille.')]
    #[Assert\Length(max: 50, maxMessage: 'Le nom de famille ne peut dépasser {{ limit }} caractères.')]
    public $surname;

    /**
     * @var string
     */
    #[Assert\Email(message: 'L\'adresse e-mail n\'est pas valide.')]
    #[Assert\NotBlank(message: 'Veuillez renseigner votre adresse e-mail.')]
    public $email;

    /**
     * @var string
     */
    #[Assert\NotBlank(message: 'Veuillez renseigner un sujet.')]
    #[Assert\Length(max: 100, maxMessage: 'Le sujet ne peut dépasser {{ limit }} caractères.')]
    public $subject;

    /**
     * @var string
     */
    #[Assert\NotBlank(message: 'Veuillez saisir votre message.')]
    #[Assert\Length(min: 5, minMessage: 'Votre message doit contenir au moins {{ limit }} caractères.')]
    public $message;

    /**
     * @var string|null
     */
    #[Assert\Regex(
        pattern: '/^[0-9\s\.\-()+]{8,20}$/',
        message: 'Le numéro de téléphone n\'est pas valide.',
        htmlPattern: '^[0-9\s\.\-()+]{8,20}$'
    )]
    public $tel = null;

    /**
     * @return string
     */
    public function getName(): string
    {
        return $this->name;
    }

    /**
     * @param string $name
     */
    public function setName(string $name): void
    {
        $this->name = $name;
    }

    /**
     * @return string
     */
    public function getSurname(): string
    {
        return $this->surname;
    }

    /**
     * @param string $surname
     */
    public function setSurname(string $surname): void
    {
        $this->surname = $surname;
    }

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

    /**
     * @param string $email
     */
    public function setEmail(string $email): void
    {
        $this->email = $email;
    }

    /**
     * @return string
     */
    public function getSubject(): string
    {
        return $this->subject;
    }

    /**
     * @param string $subject
     */
    public function setSubject(string $subject): void
    {
        $this->subject = $subject;
    }

    /**
     * @return string
     */
    public function getMessage(): string
    {
        return $this->message;
    }

    /**
     * @param string $message
     */
    public function setMessage(string $message): void
    {
        $this->message = $message;
    }

    /**
     * @return string|null
     */
    public function getTel(): ?string
    {
        return $this->tel;
    }

    /**
     * @param string|null $tel
     */
    public function setTel(?string $tel): void
    {
        $this->tel = $tel;
    }
}
