import { FormValidator } from '../FormValidator';
import type { ContactMessageDto } from '../../../types/api/ContactApi';

export class ContactValidator extends FormValidator<ContactMessageDto> {
    constructor() {
        super();

        this.rules.set('name', [
            {
                validate: (value: unknown) => typeof value === 'string' && value.trim().length >= 2,
                message: 'Le nom doit contenir au moins 2 caractères'
            },
            {
                validate: (value: unknown) => typeof value === 'string' && value.length <= 100,
                message: 'Le nom ne peut pas dépasser 100 caractères'
            }
        ]);

        this.rules.set('email', [
            {
                validate: (value: unknown) => typeof value === 'string' && /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value),
                message: "L'email n'est pas valide"
            },
            {
                validate: (value: unknown) => typeof value === 'string' && value.length <= 255,
                message: "L'email ne peut pas dépasser 255 caractères"
            }
        ]);

        this.rules.set('message', [
            {
                validate: (value: unknown) => typeof value === 'string' && value.trim().length >= 10,
                message: 'Le message doit contenir au moins 10 caractères'
            },
            {
                validate: (value: unknown) => typeof value === 'string' && value.length <= 2000,
                message: 'Le message ne peut pas dépasser 2000 caractères'
            }
        ]);

        this.rules.set('website', [
            {
                validate: (value: unknown) => !value || (typeof value === 'string' && value.trim() === ''),
                message: 'Spam détecté'
            }
        ]);
    }
}
