<?php

declare(strict_types=1);

/*
 * This file is part of formilicious bundle for Contao.
 *
 * (c) Benjamin Roth
 *
 * @license LGPL-3.0-or-later
 */

namespace vonRotenberg\FormiliciousBundle\EventListener;

use Contao\Controller;
use Contao\CoreBundle\DependencyInjection\Attribute\AsHook;
use Contao\DataContainer;

#[AsHook('getAttributesFromDca')]
class GetAttributesFromDca
{
    public function __invoke(array $arrAttributes, $context): array
    {
        if ($context instanceof DataContainer && $context->field)
        {
            Controller::loadDataContainer($context->table);
            $arrData = $GLOBALS['TL_DCA'][$context->table]['fields'][$context->field];

            if (isset($arrData['eval']['eSM_fl_width']))
            {
                $arrAttributes['eSM_fl_width'] = $arrData['eval']['eSM_fl_width'];
            }

            if (isset($arrData['eval']['eSM_fl_clear']))
            {
                $arrAttributes['eSM_fl_clear'] = $arrData['eval']['eSM_fl_clear'];
            }

            if (isset($arrData['eval']['eSM_fl_class']))
            {
                $arrAttributes['eSM_fl_class'] = $arrData['eval']['eSM_fl_class'];
            }

            if (isset($arrData['eval']['eSM_fl_lblpadding']))
            {
                $arrAttributes['eSM_fl_lblpadding'] = $arrData['eval']['eSM_fl_lblpadding'];
            }

            if (isset($arrData['eval']['eSM_fl_alignment']))
            {
                $arrAttributes['eSM_fl_alignment'] = $arrData['eval']['eSM_fl_alignment'];
            }
        }

        if (!isset($arrAttributes['class']))
        {
            $arrAttributes['class'] = '';
        }

        if (isset($arrAttributes['eSM_fl_width']) && is_numeric($arrAttributes['eSM_fl_width']))
        {
            $arrAttributes['class'].= ' w' . $arrAttributes['eSM_fl_width'];
        }

        if (isset($arrAttributes['eSM_fl_class']))
        {
            $arrAttributes['class'].= ' ' . $arrAttributes['eSM_fl_class'];
        }

        if (isset($arrAttributes['eSM_fl_width']))
        {
            $arrAttributes['class'].= ' clr';
        }

        if (isset($arrAttributes['type']) && $arrAttributes['type'] === 'submit')
        {
            if (isset($arrAttributes['eSM_fl_lblpadding']))
            {
                $arrAttributes['class'].= ' lblp';
            }

            if (isset($arrAttributes['eSM_fl_alignment']))
            {
                $arrAttributes['class'].= ' ' . $arrAttributes['eSM_fl_alignment'].'_alignment';
            }
        }

        return $arrAttributes;
    }
}