<?php

namespace XF\Report;

use XF\Entity\Report;
use XF\Mvc\Entity\Entity;

/**
 * @extends AbstractHandler<\XF\Entity\ProfilePost>
 */
class ProfilePostHandler extends AbstractHandler
{
	protected function canViewContent(Report $report)
	{
		return \XF::visitor()->canViewProfilePosts();
	}

	protected function canActionContent(Report $report)
	{
		$visitor = \XF::visitor();
		return ($visitor->hasPermission('profilePost', 'editAny') || $visitor->hasPermission('profilePost', 'deleteAny'));
	}

	public function setupReportEntityContent(Report $report, Entity $content)
	{
		$report->content_user_id = $content->user_id;
		$report->content_info = [
			'message' => $content->message,
			'profileUser' => [
				'user_id' => $content->ProfileUser->user_id,
				'username' => $content->ProfileUser->username,
			],
			'user' => [
				'user_id' => $content->user_id,
				'username' => $content->username,
			],
			'profile_post_id' => $content->profile_post_id,
		];
	}

	public function getContentTitle(Report $report)
	{
		if (isset($report->content_info['user']))
		{
			if ($report->content_info['user']['user_id'] == $report->content_info['profileUser']['user_id'])
			{
				return \XF::phrase('status_update_by_x', [
					'username' => $report->content_info['user']['username'],
				]);
			}
			else
			{
				return \XF::phrase('profile_post_by_x', [
					'name' => $report->content_info['user']['username'],
				]);
			}
		}
		else
		{
			return \XF::phrase('profile_post_for_x', [
				'username' => $report->content_info['profile_username'],
			]);
		}
	}

	public function getContentMessage(Report $report)
	{
		return $report->content_info['message'];
	}

	public function getContentLink(Report $report)
	{
		if (isset($report->content_info['user']))
		{
			$linkData = $report->content_info;
		}
		else
		{
			$linkData = ['profile_post_id' => $report->content_id];
		}

		return \XF::app()->router('public')->buildLink('canonical:profile-posts', $linkData);
	}

	public function getEntityWith()
	{
		return ['ProfileUser'];
	}
}
