<?php

namespace Smarty\Compile\Tag;

/**
 * Smarty Internal Plugin Compile Append
 * Compiles the {append} tag
 *


 * @author     Uwe Tews
 */

/**
 * Smarty Internal Plugin Compile Append Class
 *


 */
class Append extends Assign
{

	/**
	 * @inheritdoc
	 */
	protected $optional_attributes = ['scope', 'index'];

    /**
     * Compiles code for the {append} tag
     *
     * @param array                                 $args      array with attributes from parser
     * @param \Smarty\Compiler\Template $compiler  compiler object
     * @param array                                 $parameter array with compilation parameter
     *
     * @return string compiled code
     * @throws \Smarty\CompilerException
     */
	public function compile($args, \Smarty\Compiler\Template $compiler, $parameter = array(), $tag = null, $function = null): string
	{

        // check and get attributes
        $_attr = $this->getAttributes($compiler, $args);

        // map to compile assign attributes
        if (isset($_attr[ 'index' ])) {
            $_params[ 'smarty_internal_index' ] = '[' . $_attr[ 'index' ] . ']';
            unset($_attr[ 'index' ]);
        } else {
            $_params[ 'smarty_internal_index' ] = '[]';
        }
        $_new_attr = array();
        foreach ($_attr as $key => $value) {
            $_new_attr[] = array($key => $value);
        }
        // call compile assign
        return parent::compile($_new_attr, $compiler, $_params);
    }
}
