<?php

namespace Planaday\Entities\Course\DTO;

class CourseTemplate {
	protected string $code = '';
	protected string $name = '';
	protected string $description = '';
	protected int $dayPartAmount = 0;
	protected bool $hasELearning = false;
	protected bool $hasCode95 = false;
	protected bool $hasSoob = false;
	protected bool $hasStap = false;
	protected bool $stapOnly = false;
	/** @var string[] */
	protected array $labels = [];
	protected string $language = '';
	
	public function __construct(protected int $id
	){}

	public function setCode( ?string $code ): self {
		$this->code = $code ?? $this->code;

		return $this;
	}

	public function setName( ?string $name ): self {
		$this->name = $name ?? $this->name;

		return $this;
	}

	public function setDescription( ?string $description ): self {
		$this->description = $description ?? $this->description;

		return $this;
	}

	public function setDayPartAmount( ?int $dayPartAmount ): self {
		$this->dayPartAmount = $dayPartAmount ?? $this->dayPartAmount;

		return $this;
	}

	public function setHasELearning( ?bool $hasELearning ): self {
		$this->hasELearning = $hasELearning ?? $this->hasELearning;

		return $this;
	}

	public function setHasCode95( ?bool $hasCode95 ): self {
		$this->hasCode95 = $hasCode95 ?? $this->hasCode95;

		return $this;
	}

	public function setHasSoob( ?bool $hasSoob ): self {
		$this->hasSoob = $hasSoob ?? $this->hasSoob;

		return $this;
	}

	public function setHasStap( ?bool $hasStap ): self {
		$this->hasStap = $hasStap ?? $this->hasStap;

		return $this;
	}

	public function setStapOnly( ?bool $stapOnly ): self {
		$this->stapOnly = $stapOnly ?? $this->stapOnly;

		return $this;
	}

	/**
	 * @param string[] $labels
	 *
	 * @return $this
	 */
	public function setLabels( ?array $labels ): self {
		$this->labels = $labels ?? $this->labels;

		return $this;
	}

	public function setLanguage( ?string $language ): self {
		$this->language = $language ?? $this->language;

		return $this;
	}

	public function getId(): int {
		return $this->id;
	}

	public function getCode(): string {
		return $this->code;
	}

	public function getName(): string {
		return $this->name;
	}

	public function getDescription(): string {
		return $this->description;
	}

	public function getDayPartAmount(): int {
		return $this->dayPartAmount;
	}

	public function isHasELearning(): bool {
		return $this->hasELearning;
	}

	public function isHasCode95(): bool {
		return $this->hasCode95;
	}

	public function isHasSoob(): bool {
		return $this->hasSoob;
	}

	public function isHasStap(): bool {
		return $this->hasStap;
	}

	public function isStapOnly(): bool {
		return $this->stapOnly;
	}

	/**
	 * @return string[]
	 */
	public function getLabels(): array {
		return $this->labels;
	}

	public function getLanguage(): string {
		return $this->language;
	}
}
