<?php

namespace XF\Behavior;

use XF\Job\PermissionRebuild;
use XF\Mvc\Entity\Behavior;

/**
 * Class PermissionRebuildable
 *
 * @package XF\Behavior
 */
class PermissionRebuildable extends Behavior
{
	/**
	 * @return array
	 */
	protected function getDefaultConfig()
	{
		return [
			'permissionContentType' => null,
		];
	}

	/**
	 * @return array
	 */
	protected function getDefaultOptions()
	{
		return [
			'rebuildCache' => true,
		];
	}

	/**
	 *
	 */
	public function postSave()
	{
		if ($this->getOption('rebuildCache'))
		{
			if (
				$this->config['permissionContentType']
				&& ($this->entity->isInsert())
			)
			{
				$this->app()->jobManager()->enqueueUnique('permissionRebuild', PermissionRebuild::class);
			}
		}
	}

	/**
	 *
	 */
	public function postDelete()
	{
		if ($this->getOption('rebuildCache'))
		{
			if ($this->config['permissionContentType'])
			{
				$this->entity->db()->delete(
					'xf_permission_entry_content',
					'content_type = ? AND content_id = ?',
					[$this->config['permissionContentType'], $this->id()]
				);

				$this->app()->jobManager()->enqueueUnique('permissionRebuild', PermissionRebuild::class);
			}
		}
	}
}
