<?php

namespace TablePress\PhpOffice\PhpSpreadsheet\Document;

use TablePress\PhpOffice\PhpSpreadsheet\Shared\PasswordHasher;

class Security
{
	/**
	 * LockRevision.
	 *
	 * @var bool
	 */
	private $lockRevision = false;

	/**
	 * LockStructure.
	 *
	 * @var bool
	 */
	private $lockStructure = false;

	/**
	 * LockWindows.
	 *
	 * @var bool
	 */
	private $lockWindows = false;

	/**
	 * RevisionsPassword.
	 *
	 * @var string
	 */
	private $revisionsPassword = '';

	/**
	 * WorkbookPassword.
	 *
	 * @var string
	 */
	private $workbookPassword = '';

	/**
	 * Create a new Document Security instance.
	 */
	public function __construct()
	{
	}

	/**
	 * Is some sort of document security enabled?
	 */
	public function isSecurityEnabled(): bool
	{
		return  $this->lockRevision ||
				$this->lockStructure ||
				$this->lockWindows;
	}

	public function getLockRevision(): bool
	{
		return $this->lockRevision;
	}

	public function setLockRevision(?bool $locked): self
	{
		if ($locked !== null) {
			$this->lockRevision = $locked;
		}

		return $this;
	}

	public function getLockStructure(): bool
	{
		return $this->lockStructure;
	}

	public function setLockStructure(?bool $locked): self
	{
		if ($locked !== null) {
			$this->lockStructure = $locked;
		}

		return $this;
	}

	public function getLockWindows(): bool
	{
		return $this->lockWindows;
	}

	public function setLockWindows(?bool $locked): self
	{
		if ($locked !== null) {
			$this->lockWindows = $locked;
		}

		return $this;
	}

	public function getRevisionsPassword(): string
	{
		return $this->revisionsPassword;
	}

	/**
	 * Set RevisionsPassword.
	 *
	 * @param string $password
	 * @param bool $alreadyHashed If the password has already been hashed, set this to true
	 *
	 * @return $this
	 */
	public function setRevisionsPassword(?string $password, bool $alreadyHashed = false)
	{
		if ($password !== null) {
			if (!$alreadyHashed) {
				$password = PasswordHasher::hashPassword($password);
			}
			$this->revisionsPassword = $password;
		}

		return $this;
	}

	public function getWorkbookPassword(): string
	{
		return $this->workbookPassword;
	}

	/**
	 * Set WorkbookPassword.
	 *
	 * @param string $password
	 * @param bool $alreadyHashed If the password has already been hashed, set this to true
	 *
	 * @return $this
	 */
	public function setWorkbookPassword(?string $password, bool $alreadyHashed = false)
	{
		if ($password !== null) {
			if (!$alreadyHashed) {
				$password = PasswordHasher::hashPassword($password);
			}
			$this->workbookPassword = $password;
		}

		return $this;
	}
}
