<?php

declare(strict_types=1);

namespace App\Library\VK\Mapper\Strategy;

use App\Library\VK\Entity\VkPost;
use App\Library\VK\Mapper\AttachmentMapper;
use App\Library\VK\Mapper\Strategy\Interfaces\MappingStrategyInterface;

class RepostStrategy implements MappingStrategyInterface
{
    public function __construct(private AttachmentMapper $attachmentMapper) {}

    public function map(array $item): VkPost
    {
        $post = new VkPost();
        $post->setId($item['id']);
        $post->setOwnerId($item['owner_id']);
        $post->setFromId($item['from_id']);
        $post->setDate($item['date']);
        $post->setIsRepost();
        $post->setText($item['text'] ?? '');

        // Переключаемся на оригинал для контента
        $original = $this->getOriginalPost($item);

        $post->setText($original['text'] ?? '');

        // Вложения берем именно из оригинала
        if (! empty($original['attachments'])) {
            $attachments = $this->attachmentMapper->map($original['attachments']);
            $post->setAttachments($attachments);
        }

        return $post;
    }

    private function getOriginalPost(array $item): array
    {
        $copy_history_length = count($item['copy_history']);

        if($copy_history_length > 0) {
            return end($item['copy_history']);
        }

        return $item;
    }
}
