<?php

declare(strict_types=1);

namespace App\Administration\Infrastructure\Api\Resource;

use ApiPlatform\Metadata\ApiResource;
use ApiPlatform\Metadata\Post;
use App\Administration\Infrastructure\Api\Processor\ResetPasswordProcessor;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * Input DTO for password reset.
 *
 * Endpoint: POST /api/password/reset
 */
#[ApiResource(
    shortName: 'PasswordReset',
    operations: [
        new Post(
            uriTemplate: '/password/reset',
            processor: ResetPasswordProcessor::class,
            output: ResetPasswordOutput::class,
        ),
    ],
)]
final class ResetPasswordInput
{
    #[Assert\NotBlank(message: 'Le token est requis.')]
    public string $token = '';

    #[Assert\NotBlank(message: 'Le mot de passe est requis.')]
    #[Assert\Length(
        min: 8,
        minMessage: 'Le mot de passe doit contenir au moins {{ limit }} caractères.',
    )]
    #[Assert\Regex(
        pattern: '/[A-Z]/',
        message: 'Le mot de passe doit contenir au moins une majuscule.',
    )]
    #[Assert\Regex(
        pattern: '/[a-z]/',
        message: 'Le mot de passe doit contenir au moins une minuscule.',
    )]
    #[Assert\Regex(
        pattern: '/[0-9]/',
        message: 'Le mot de passe doit contenir au moins un chiffre.',
    )]
    #[Assert\Regex(
        pattern: '/[^A-Za-z0-9]/',
        message: 'Le mot de passe doit contenir au moins un caractère spécial.',
    )]
    public string $password = '';
}
