<?php

namespace App\Packages\Capsule\Transformer;

use App\Packages\Capsule\Models\CapsuleComment;
use App\Packages\User\Models\User;
use App\Packages\User\Models\UserMention;
use App\Packages\User\Repository\UserMentionRepository;
use App\Packages\User\Transformer\UserMentionTransformer;
use App\Packages\User\Transformer\UserTransformer;

/**
 * Class CapsuleCommentTransformer
 * @package App\Packages\Capsule\Transformer
 */
class CapsuleCommentTransformer
{
	/**
	 * @param CapsuleComment $capsuleComment
	 *
	 * @return array
	 */
	public static function commentSmall(CapsuleComment $capsuleComment, User $user)
	{
	    $capsule_user = $capsuleComment->user;
		$userObject = UserTransformer::smallObject($capsule_user);
		$mentioned = UserMentionRepository::init()->getAllFromComment($capsuleComment);

		$result = [
			'comment_id' => $capsuleComment->uuid,
			'owner' => $userObject,
            'is_my_comment' => ($capsule_user->id == $user->id) ? true : false,
		    'has_mentions' => false
        ];

		if ( $mentioned->isNotEmpty() ) {
		    $result['has_mentions'] = true;
            $result['mentioned_users'] = UserMentionTransformer::smallObject($mentioned);
        }

		return $result;
	}

	/**
	 * @param CapsuleComment $capsuleComment
	 *
	 * @return array
	 */
	public static function commentFull(CapsuleComment $capsuleComment, User $user)
	{
	    $capsule_user = $capsuleComment->user;
		$userObject = UserTransformer::smallObject($capsule_user);
		$mentioned = UserMentionRepository::init()->getAllFromComment($capsuleComment);

		$result = [
			'comment_id' => $capsuleComment->uuid,
			'content' => $capsuleComment->content,
			'owner' => $userObject,
            'is_my_comment' => ($capsule_user->id == $user->id) ? true : false,
		    'has_mentions' => false
        ];

		if ( $mentioned->isNotEmpty() ) {
            $result['has_mentions'] = true;
            $result['mentioned_users'] = UserMentionTransformer::smallObject($mentioned);
        }

		return $result;
	}

    /**
     * @param CapsuleComment $capsuleComment
     *
     * @return array
     */
    public static function commentPublic(CapsuleComment $capsuleComment)
    {
        $capsule_user = $capsuleComment->user;
        $userObject = UserTransformer::smallObject($capsule_user);
        $mentioned = UserMentionRepository::init()->getAllFromComment($capsuleComment);

        $result = [
            'comment_id' => $capsuleComment->uuid,
            'content' => $capsuleComment->content,
            'owner' => $userObject
        ];

        if ( $mentioned->isNotEmpty() ) {
            foreach ($mentioned as $mention) {
                $result['content'] = str_replace("@{{".$mention->user_uuid."}}", $mention->nickname, $result['content']);
            }
        }

        return $result;
    }

}
