<?php
declare(strict_types=1);

namespace Autogedal\Reduceri\Block;

use Autogedal\Reduceri\Helper\Data;
use Autogedal\Reduceri\Model\DiscountProvider;
use Magento\Catalog\Model\Category;
use Magento\Catalog\Model\ResourceModel\Category\CollectionFactory;
use Magento\Framework\View\Element\Template;
use Magento\Framework\View\Element\Template\Context;
use Magento\Store\Model\StoreManagerInterface;

class Index extends Template
{
    public function __construct(
        Context                  $context,
        private readonly Data              $helper,
        private readonly DiscountProvider  $discountProvider,
        private readonly CollectionFactory $categoryCollectionFactory,
        private readonly StoreManagerInterface $storeManager,
        array $data = []
    ) {
        parent::__construct($context, $data);
    }

    public function getCategoriesData(): array
    {
        $rootCategoryId = $this->storeManager->getStore()->getRootCategoryId();
        $excluded       = $this->helper->getExcludedCategoryIds();

        $collection = $this->categoryCollectionFactory->create()
            ->addAttributeToSelect(['name', 'image', 'url_key', 'is_active'])
            ->addAttributeToFilter('is_active', 1)
            ->addAttributeToFilter('level', 2)
            ->addAttributeToFilter('path', ['like' => '1/' . $rootCategoryId . '/%'])
            ->setOrder('position', 'ASC');

        if (!empty($excluded)) {
            $collection->addAttributeToFilter('entity_id', ['nin' => $excluded]);
        }

        $result = [];
        foreach ($collection as $category) {
            $stats = $this->discountProvider->getStats($category);
            if ($stats['count'] === 0) {
                continue;
            }
            $result[] = [
                'category' => $category,
                'count'    => $stats['count'],
                'max_pct'  => $stats['max_pct'],
                'url'      => $this->getBaseUrl() . 'reduceri/' . $category->getUrlKey(),
            ];
        }

        return $result;
    }

    public function getIconClass(string $urlKey): string
    {
        $map = [
            'carlige-de-remorcare'  => 'icon-icon-carlige_remorcare',
            'carlig-remorcare'      => 'icon-icon-carlige_remorcare',
            'bare-portbagaj'        => 'icon-icon-bare_transversale',
            'bare-transversale'     => 'icon-icon-bare_transversale',
            'cutii-portbagaj-auto'  => 'icon-icon-cutii_portbagaj',
            'cutii-portbagaj'       => 'icon-icon-cutii_portbagaj',
            'covorase-auto'         => 'icon-icon-covorase_auto',
            'suporti-biciclete'     => 'icon-icon-suporturi_biciclete',
            'suporturi-biciclete'   => 'icon-icon-suporturi_biciclete',
            'suporturi-schiuri'     => 'icon-icon-suporturi_skiuri',
            'suporti-schiuri'       => 'icon-icon-suporturi_skiuri',
            'scut-motor-metalic'    => 'icon-icon-scuturi_metalice_auto',
            'scuturi-metalice'      => 'icon-icon-scuturi_metalice_auto',
            'tavite-portbagaj'      => 'icon-icon-tavite_portbagaj',
            'accesorii-remorcare'   => 'icon-icon-ccesorii_remorcare',
            'accesorii'             => 'icon-icon-ccesorii_remorcare',
            'corturi-auto'          => 'icon-icon-corturi_auto',
            'genti-auto'            => 'icon-icon-genti_rucsacuri',
            'genti-rucsacuri'       => 'icon-icon-genti_rucsacuri',
            'transport-copii'       => 'icon-icon-transport_copii',
            'paravanturi'           => 'icon-paravanturi',
        ];

        return $map[$urlKey] ?? 'icon-category';
    }

    public function isBannerEnabled(): bool
    {
        return $this->helper->isBannerEnabled();
    }

    public function getBannerUrl(): string
    {
        $image = $this->helper->getBannerImage();
        if (empty($image)) {
            return '';
        }
        return $this->storeManager->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA)
            . 'autogedal/reduceri/' . $image;
    }

    public function getBannerUrlMobile(): string
    {
        $image = $this->helper->getBannerImageMobile();
        if (empty($image)) {
            return '';
        }
        return $this->storeManager->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA)
            . 'autogedal/reduceri/' . $image;
    }

    public function getIdentities(): array
    {
        return [Category::CACHE_TAG];
    }
}
