<?php

declare(strict_types=1);

namespace App\Models;

/**
 * Représente un post (DTO / entité légère).
 *
 * Cette classe est immuable par simplicité : on construit une instance
 * depuis les données (DB ou formulaire) et on récupère ses valeurs via des getters.
 */
final class Post
{
    private int $id;
    private string $title;
    private string $content;

    /**
     * @param int $id Identifiant (0 si non persisté)
     * @param string $title Titre de l'article
     * @param string $content Contenu HTML ou texte de l'article
     */
    public function __construct(int $id, string $title, string $content)
    {
        $this->id = $id;
        $this->title = $title;
        $this->content = $content;
    }

    /**
     * Crée une instance depuis un tableau (par ex. ligne DB ou formulaire).
     *
     * Ce helper facilite la migration depuis le format tableau existant.
     *
     * @param array<string,mixed> $data Clé 'id' (optionnelle), 'title', 'content'
     * @return self
     */
    public static function fromArray(array $data): self
    {
        $id = isset($data['id']) ? (int)$data['id'] : 0;
        $title = isset($data['title']) ? (string)$data['title'] : '';
        $content = isset($data['content']) ? (string)$data['content'] : '';

        return new self($id, $title, $content);
    }

    /** @return int */
    public function getId(): int
    {
        return $this->id;
    }

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

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

    /**
     * Retourne un tableau simple utile pour la persistance.
     *
     * @return array{title:string,content:string}
     */
    public function toPersistableArray(): array
    {
        return [
            'title' => $this->title,
            'content' => $this->content,
        ];
    }
}
