<?php

namespace TablePress\PhpOffice\PhpSpreadsheet\Chart;

use TablePress\PhpOffice\PhpSpreadsheet\RichText\RichText;

class Title
{
	/**
	 * Title Caption.
	 *
	 * @var array|RichText|string
	 */
	private $caption = '';

	/**
	 * Allow overlay of other elements?
	 *
	 * @var bool
	 */
	private $overlay = true;

	/**
	 * Title Layout.
	 *
	 * @var ?Layout
	 */
	private $layout;

	/**
	 * Create a new Title.
	 *
	 * @param array|RichText|string $caption
	 * @param ?Layout $layout
	 * @param bool $overlay
	 */
	public function __construct($caption = '', ?Layout $layout = null, $overlay = false)
	{
		$this->caption = $caption;
		$this->layout = $layout;
		$this->setOverlay($overlay);
	}

	/**
	 * Get caption.
	 *
	 * @return array|RichText|string
	 */
	public function getCaption()
	{
		return $this->caption;
	}

	public function getCaptionText(): string
	{
		$caption = $this->caption;
		if (is_string($caption)) {
			return $caption;
		}
		if ($caption instanceof RichText) {
			return $caption->getPlainText();
		}
		$retVal = '';
		foreach ($caption as $textx) {
			/** @var RichText|string */
			$text = $textx;
			if ($text instanceof RichText) {
				$retVal .= $text->getPlainText();
			} else {
				$retVal .= $text;
			}
		}

		return $retVal;
	}

	/**
	 * Set caption.
	 *
	 * @param array|RichText|string $caption
	 *
	 * @return $this
	 */
	public function setCaption($caption)
	{
		$this->caption = $caption;

		return $this;
	}

	/**
	 * Get allow overlay of other elements?
	 *
	 * @return bool
	 */
	public function getOverlay()
	{
		return $this->overlay;
	}

	/**
	 * Set allow overlay of other elements?
	 *
	 * @param bool $overlay
	 */
	public function setOverlay($overlay): void
	{
		$this->overlay = $overlay;
	}

	public function getLayout(): ?Layout
	{
		return $this->layout;
	}
}
