<?php

declare(strict_types=1);

namespace Modules\{{ module }}\Logic\DTOs;

/**
 * @intent DTO imutável de entrada do módulo {{ module }} (ADR-001).
 */
final readonly class {{ class }}DTO
{
    public function __construct(
        public string $title,
        public ?string $description = null,
    ) {}

    /**
     * @param  array<string, mixed>  $data
     */
    public static function fromArray(array $data): self
    {
        return new self(
            title: self::string($data['title'] ?? null) ?? '',
            description: self::string($data['description'] ?? null),
        );
    }

    /**
     * @return array<string, mixed>
     */
    public function toArray(): array
    {
        return [
            'title' => $this->title,
            'description' => $this->description,
        ];
    }

    private static function string(mixed $value): ?string
    {
        return is_string($value) && trim($value) !== '' ? trim($value) : null;
    }
}
