<?php
/**
 * @author  Magediary
 * @package Magediary_ProductQuestion
 */

namespace Magediary\ProductQuestion\Block\Adminhtml\Answer\Question;

use Magediary\ProductQuestion\Model\QuestionFactory;
use Magediary\ProductQuestion\Ui\Component\Listing\Column\QuestionStatus;
use Magento\Backend\Block\Template\Context;
use Magento\Backend\Block\Widget\Grid\Extended;
use Magento\Backend\Helper\Data;

/**
 * Adminhtml question grid block
 */
class Grid extends Extended
{
    /**
     * @var \Magento\Catalog\Model\Product
     */
    protected $_questionFactory;

    /**
     * @var QuestionStatus
     */
    protected $_status;

    /**
     * @param Context $context
     * @param Data $backendHelper
     * @param QuestionFactory $questionFactory
     * @param QuestionStatus $status
     * @param array $data
     */
    public function __construct(
        Context $context,
        Data $backendHelper,
        QuestionFactory $questionFactory,
        QuestionStatus $status,
        array $data = []
    ) {
        $this->_questionFactory = $questionFactory;
        $this->_status = $status;
        parent::__construct($context, $backendHelper, $data);
    }

    /**
     * Initialize
     *
     * @return void
     */
    protected function _construct()
    {
        parent::_construct();
        $this->setRowClickCallback('answer.gridRowClick');
        $this->setId('questionGrid');
        $this->setDefaultSort('entity_id');
        $this->setDefaultDir('DESC');
        $this->setSaveParametersInSession(true);
        $this->setUseAjax(true);
        $this->setVarNameFilter('question_filter');
    }

    /**
     * Prepare collection
     *
     * @return $this
     */
    protected function _prepareCollection()
    {
        $collection = $this->_questionFactory->create()->getCollection();

        $this->setCollection($collection);

        parent::_prepareCollection();

        return $this;
    }

    /**
     * Prepare product question grid
     *
     * @return void
     */
    protected function _prepareColumns()
    {
        $this->addColumn(
            'question_id',
            [
                'header' => __('ID'),
                'index' => 'question_id',
                'header_css_class' => 'col-id',
                'column_css_class' => 'col-id'
            ]
        );

        $this->addColumn('detail', ['header' => __('Detail'), 'index' => 'detail']);

        $this->addColumn(
            'status',
            [
                'header' => __('Status'),
                'index' => 'status',
                'type' => 'options',
                'source' => QuestionStatus::class,
                'options' => $this->_status->getOptionArray()
            ]
        );

        $this->addColumn(
            'created_at',
            [
                'header' => __('Created At'),
                'index' => 'created_at',
                'type'      => 'datetime',
                'width'     => '150px'
            ]
        );
    }

    /**
     * Get question grid url
     *
     * @return string
     */
    public function getGridUrl()
    {
        return $this->getUrl('magediary_productquestion/answer/questionGrid', ['_current' => true]);
    }

    /**
     * Get question row url
     *
     * @param \Magento\Framework\DataObject $row
     * @return string
     */
    public function getRowUrl($row)
    {
        return $this->getUrl('magediary_productquestion/answer/jsonQuestionInfo', ['id' => $row->getId()]);
    }

    /**
     * Prepare mass action
     *
     * @return $this
     */
    protected function _prepareMassaction()
    {
        return $this;
    }
}
