<?php
namespace Autogedal\BlogInternalLinking\Block\Adminhtml\Post\Tab;

use Autogedal\BlogInternalLinking\Model\ResourceModel\Group\CollectionFactory;

class InternalLinking extends \Magento\Backend\Block\Widget\Form\Generic implements \Magento\Backend\Block\Widget\Tab\TabInterface
{
    private $groupCollectionFactory;

    public function __construct(
        \Magento\Backend\Block\Template\Context $context,
        \Magento\Framework\Registry $registry,
        \Magento\Framework\Data\FormFactory $formFactory,
        CollectionFactory $groupCollectionFactory,
        array $data = []
    ) {
        $this->groupCollectionFactory = $groupCollectionFactory;
        parent::__construct($context, $registry, $formFactory, $data);
    }

    protected function _prepareForm()
    {
        $post = $this->_coreRegistry->registry('tm_blog_post');

        $groups = $this->groupCollectionFactory->create();
        $options = [['value' => '', 'label' => __('-- None --')]];
        foreach ($groups as $group) {
            $label = $group->getGroupName() ?: $group->getTitle();
            $options[] = ['value' => $group->getId(), 'label' => $label];
        }

        $form = $this->_formFactory->create();
        $form->setHtmlIdPrefix('post_');

        $fieldset = $form->addFieldset('internal_linking_fieldset', ['legend' => __('Internal Linking')]);

        $fieldset->addField('linking_group_id', 'select', [
            'name'   => 'linking_group_id',
            'label'  => __('Linking Group'),
            'title'  => __('Linking Group'),
            'values' => $options,
            'note'   => __('The product block that appears automatically in this article.'),
        ]);

        if ($post) {
            $form->setValues($post->getData());
        }

        $this->setForm($form);
        return parent::_prepareForm();
    }

    public function getTabLabel() { return __('Internal Linking'); }
    public function getTabTitle() { return __('Internal Linking'); }
    public function canShowTab() { return true; }
    public function isHidden() { return false; }
}
