<?php

namespace App\Services\Lubricantes;

/**
 * Centraliza la normalización del payload para que los controladores no
 * persistan datos crudos del request y mantengan un contrato mínimo y estable.
 */
class LubricantePayloadService
{
    /**
     * Reduce el payload a los únicos atributos persistibles y normaliza el
     * título para evitar variantes por espacios accidentales.
     *
     * @param array<string, mixed> $validated
     * @return array{titulo: string, estado: int}
     */
    public function toPersistenceAttributes(array $validated): array
    {
        return [
            'titulo' => $this->normalizeTitle((string) ($validated['titulo'] ?? '')),
            'estado' => $this->normalizeState($validated['estado'] ?? 0),
        ];
    }

    /**
     * Unifica espacios internos para reducir duplicados visuales y slugs
     * inconsistentes generados a partir del mismo texto semántico.
     */
    public function normalizeTitle(string $title): string
    {
        $normalized = preg_replace('/\s+/u', ' ', trim($title));

        return $normalized ?? '';
    }

    /**
     * Fuerza un estado binario predecible antes de persistir, incluso si el
     * request llega como string desde formularios o clients legacy.
     *
     * @param mixed $state
     */
    public function normalizeState($state): int
    {
        return (int) ((int) $state === 1);
    }
}
