<?php

namespace TablePress\PhpOffice\PhpSpreadsheet\RichText;

use TablePress\PhpOffice\PhpSpreadsheet\Exception as SpreadsheetException;
use TablePress\PhpOffice\PhpSpreadsheet\Style\Font;

class Run extends TextElement implements ITextElement
{
	/**
	 * Font.
	 */
	private ?Font $font;

	/**
	 * Create a new Run instance.
	 *
	 * @param string $text Text
	 */
	public function __construct(string $text = '')
	{
		parent::__construct($text);
		// Initialise variables
		$this->font = new Font();
	}

	/**
	 * Get font.
	 */
	public function getFont(): ?Font
	{
		return $this->font;
	}

	public function getFontOrThrow(): Font
	{
		if ($this->font === null) {
			throw new SpreadsheetException('unexpected null font');
		}

		return $this->font;
	}

	/**
	 * Set font.
	 *
	 * @param ?Font $font Font
	 *
	 * @return $this
	 */
	public function setFont(?Font $font = null)
	{
		$this->font = $font;

		return $this;
	}

	/**
	 * Get hash code.
	 *
	 * @return string Hash code
	 */
	public function getHashCode(): string
	{
		return md5(
			$this->getText()
			. (($this->font === null) ? '' : $this->font->getHashCode())
			. __CLASS__
		);
	}
}
