<?php

namespace Planaday\Config\OptionGroups\General\Debug;

use Planaday\Config\OptionGroups\General\GeneralOptions;
use Planaday\Config\OptionGroups\OptionGroup;
use Planaday\Config\OptionTypes\BoolOption;
use Planaday\Utility\DependencyInjection\ComponentRegistry;
use Planaday\Utility\DependencyInjection\ComponentRegistryShortCut;

class DebugOptions extends OptionGroup implements ComponentRegistryShortCut {
	private const NAME = 'Debug';

	private const DESCRIPTION = 'De instellingen voor debugging.';

	/** @var BoolOption<bool> */
	private $sendDebugLogs;

	/** @var BoolOption<bool> */
	private $enableFontAwesome;

	public function __construct( string $index, array $data ) {
		$this->enableFontAwesome = new BoolOption(
			DebugOptionsEnum::ENABLE_FONT_AWESOME,
			'Font Awesome meegeven.',
			"Door dit uit te zetten wordt font awesome niet meegegeven.<br>" .
			"Dit zou alleen uit gezet moeten worden wanneer er problemen zijn met andere iconen op je website.<br>" .
			"Door dit uit te zetten werken iconen in de plugin niet meer als font awesome niet door een andere plugin of thema wordt meegegeven.",
			$data[ DebugOptionsEnum::ENABLE_FONT_AWESOME ] ?? null,
			true
		);

		$this->sendDebugLogs = new BoolOption(
			DebugOptionsEnum::SEND_DEBUG_LOGS,
			'Debug logs meegeven naar gebruiker.',
			"Door deze optie aan te zetten worden de debug logs mee gestuurd om zichtbaar te zijn voor de gebruiker.<br>" .
			"Er wordt aangeraden om deze optie uit te laten als er geen problemen zijn. Dit is om de hoeveelheid data die wordt verzonden te beperken.<br>" .
			"Deze logs zijn voornamelijk bedoeld om problemen te kunnen oplossen wanneer deze voorkomen.",
			$data[ DebugOptionsEnum::SEND_DEBUG_LOGS ] ?? null,
			false
		);

		$layout = [
			$this->enableFontAwesome,
			$this->sendDebugLogs
		];

		parent::__construct( $index, self::NAME, self::DESCRIPTION, $layout );
	}

	/**
	 * @return BoolOption<bool>
	 */
	public function sendDebugLogs(): BoolOption {
		return $this->sendDebugLogs;
	}

	/**
	 * @return BoolOption<bool>
	 */
	public function enableFontAwesome(): BoolOption {
		return $this->enableFontAwesome;
	}

	public static function componentRegistryConstruct( ComponentRegistry $registry ) {
		return $registry->getComponent(GeneralOptions::class)->debugOptions();
	}
}