<?php

namespace XF\ModeratorLog;

use XF\Entity\ModeratorLog;
use XF\Entity\Post;
use XF\Entity\User;
use XF\Mvc\Entity\Entity;

class PostHandler extends AbstractHandler
{
	public function isLoggable(Entity $content, $action, User $actor)
	{
		switch ($action)
		{
			case 'edit':
			case 'attachment_deleted':
				if ($actor->user_id == $content->user_id)
				{
					return false;
				}
		}

		return parent::isLoggable($content, $action, $actor);
	}

	protected function getLogActionForChange(Entity $content, $field, $newValue, $oldValue)
	{
		switch ($field)
		{
			case 'message':
				return 'edit';

			case 'message_state':
				if ($newValue == 'visible' && $oldValue == 'moderated')
				{
					return 'approve';
				}
				else if ($newValue == 'visible' && $oldValue == 'deleted')
				{
					return 'undelete';
				}
				else if ($newValue == 'deleted')
				{
					$reason = $content->DeletionLog ? $content->DeletionLog->delete_reason : '';
					return ['delete_soft', ['reason' => $reason]];
				}
				else if ($newValue == 'moderated')
				{
					return 'unapprove';
				}
				break;
		}

		return false;
	}

	protected function setupLogEntityContent(ModeratorLog $log, Entity $content)
	{
		/** @var Post $content */
		$log->content_user_id = $content->user_id;
		$log->content_username = $content->username;
		$log->content_title = $content->Thread->title ?: '';
		$log->content_url = \XF::app()->router('public')->buildLink('nopath:posts', $content);
		$log->discussion_content_type = 'thread';
		$log->discussion_content_id = $content->thread_id;
	}

	public function getContentTitle(ModeratorLog $log)
	{
		return \XF::phrase('post_in_thread_x', [
			'title' => \XF::app()->stringFormatter()->censorText($log->content_title_),
		]);
	}
}
