<?php
namespace Autogedal\Retur\Block\Customer\View;

use Magento\Framework\View\Element\Template;
use Magento\Framework\View\Element\Template\Context;
use Magento\Framework\Registry;
use Magento\Framework\Serialize\Serializer\Json;
use Magento\Framework\App\ResourceConnection;
use Psr\Log\LoggerInterface;
use Magento\Framework\Pricing\Helper\Data as PricingHelper;

class Items extends Template
{
    /**
     * @var Registry
     */
    protected $coreRegistry;

    /**
     * @var Json
     */
    protected $serializer;

    /**
     * @var ResourceConnection
     */
    protected $resource;

    /**
     * @var LoggerInterface
     */
    protected $logger;

    /**
     * @var PricingHelper
     */
    protected $pricingHelper;

    /**
     * @param Context $context
     * @param Registry $registry
     * @param Json $serializer
     * @param ResourceConnection $resource
     * @param LoggerInterface $logger
     * @param PricingHelper $pricingHelper
     * @param array $data
     */
    public function __construct(
        Context $context,
        Registry $registry,
        Json $serializer,
        ResourceConnection $resource,
        LoggerInterface $logger,
        PricingHelper $pricingHelper,
        array $data = []
    ) {
        $this->coreRegistry = $registry;
        $this->serializer = $serializer;
        $this->resource = $resource;
        $this->logger = $logger;
        $this->pricingHelper = $pricingHelper;
        parent::__construct($context, $data);
    }

    /**
     * Get current return
     *
     * @return \Autogedal\Retur\Api\Data\ReturInterface|null
     */
    public function getReturn()
    {
        return $this->coreRegistry->registry('current_retur');
    }

    /**
     * Get return items
     *
     * @return array
     */
    public function getReturnItems()
    {
        $retur = $this->getReturn();
        if (!$retur) {
            return [];
        }

        try {
            $connection = $this->resource->getConnection();
            $returItemTable = $this->resource->getTableName('autogedal_retur_item');
            $orderItemTable = $this->resource->getTableName('sales_order_item');

            $select = $connection->select()
                ->from(['ri' => $returItemTable])
                ->join(
                    ['soi' => $orderItemTable],
                    'ri.item_id = soi.item_id',
                    [
                        'product_name' => 'soi.name',
                        'product_sku' => 'soi.sku',
                        'row_total_incl_tax' => 'soi.row_total_incl_tax',
                        'qty_returned' => 'ri.qty',
                    ]
                )
                ->where('ri.retur_id = ?', $retur->getId());

            $items = $connection->fetchAll($select);

            if (!empty($items)) {
                return $items;
            }
        } catch (\Exception $e) {
            $this->logger->error('Error fetching return items: ' . $e->getMessage());
        }

        return [];
    }

    /**
     * Format price with currency symbol
     *
     * @param float $price
     * @param bool $includeContainer
     * @return string
     */
    public function formatPrice($price, $includeContainer = true)
    {
        return $this->pricingHelper->currency($price, $includeContainer);
    }
}
