<?php
declare(strict_types=1);

namespace Autogedal\Manufacturers\Block\Adminhtml\Widget;

use Magento\Backend\Block\Template;
use Magento\Backend\Block\Template\Context;
use Magento\Framework\Data\Form\Element\AbstractElement;
use Magento\Framework\Data\Form\Element\Factory;

abstract class AbstractInput extends Template
{
    public function __construct(
        Context $context,
        private readonly Factory $elementFactory,
        array $data = []
    ) {
        parent::__construct($context, $data);
    }

    abstract public function prepareElementHtml(AbstractElement $element): AbstractElement;

    protected function getInputHtml(AbstractElement $element, string $type): string
    {
        $input = $this->elementFactory->create($type, ['data' => $element->getData()]);
        $input->setId($element->getId());
        $input->setForm($element->getForm());
        $input->setClass(sprintf('widget-option input-%s admin__control-text', $type));
        if ($element->getRequired()) {
            $input->addClass('required-entry');
        }

        return $input->getElementHtml();
    }
}
