<?php

namespace XF\Template\Compiler\Tag;

use XF\Template\Compiler;
use XF\Template\Compiler\Syntax\Tag;

class PrefixInputRow extends AbstractFormElement
{
	public function compile(Tag $tag, Compiler $compiler, array $context, $inlineExpected)
	{
		$tag->assertEmpty()->assertAttribute('prefixes')->assertAttribute('type');

		$context['escape'] = false;

		$prefixes = $compiler->compileForcedExpression($tag->attributes['prefixes'], $context);

		$otherAttributes = $tag->attributes;
		unset($otherAttributes['prefixes']);

		if (!empty($otherAttributes['href']))
		{
			if (!isset($otherAttributes['listen-to']))
			{
				throw $tag->exception(\XF::phrase('to_load_prefixes_dynamically_you_must_also_provide_listen_to_attribute'));
			}
		}

		$withEscaping = [];
		$rowAttributes = [];
		foreach ($this->defaultRowOptions AS $option => $escaped)
		{
			if ($escaped)
			{
				$withEscaping[] = $option;
			}
			if (isset($otherAttributes[$option]))
			{
				$rowAttributes[$option] = $otherAttributes[$option];
				unset($otherAttributes[$option]);
			}
		}

		$config = $this->compileAttributesAsArray($otherAttributes, $compiler, $context);
		$indent = $compiler->indent();
		$attributesCode = "array(" . implode('', $config) . "\n$indent)";

		if ($tag->name == 'prefixinputrow')
		{
			$rowOptions = $this->compileAttributesAsArray($rowAttributes, $compiler, $context, $withEscaping);
			$indent = $compiler->indent();
			$rowOptionCode = "array(" . implode('', $rowOptions) . "\n$indent)";

			return "{$compiler->templaterVariable}->formPrefixInputRow($prefixes, $attributesCode, $rowOptionCode)";
		}
		else
		{
			return "{$compiler->templaterVariable}->formPrefixInput($prefixes, $attributesCode)";
		}
	}
}
