<?php

namespace BobGroup\BobGo\Observer;

use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;
use Magento\Framework\Message\ManagerInterface;
use Psr\Log\LoggerInterface;
use BobGroup\BobGo\Model\Carrier\BobGo;

class ConfigChangeObserver implements ObserverInterface
{
    /**
     * @var BobGo
     */
    protected $bobGo;

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

    /**
     * @var ManagerInterface
     */
    protected $messageManager;

    /**
     * Constructor
     *
     * @param BobGo $bobGo
     * @param LoggerInterface $logger
     * @param ManagerInterface $messageManager
     */
    public function __construct(
        BobGo $bobGo,
        LoggerInterface $logger,
        ManagerInterface $messageManager
    ) {
        $this->bobGo = $bobGo;
        $this->logger = $logger;
        $this->messageManager = $messageManager;
    }

    /**
     * Execute observer to handle configuration changes.
     *
     * @param Observer $observer
     * @return void
     */
    public function execute(Observer $observer)
    {
        $changedPaths = $observer->getEvent()->getData('changed_paths');

        if (is_array($changedPaths) && in_array('carriers/bobgo/active', $changedPaths)) {
            if ($this->bobGo->isActive()) {
                $result = $this->bobGo->triggerRatesTest();

                if ($result !== false) {
                    $this->messageManager->addSuccessMessage(
                        __('Bob Go rates at checkout connected.')
                    );
                } else {
                    $this->messageManager->addErrorMessage(
                        __('Failed to connect to rates at checkout. Please check your internet connection and make '
                            . 'sure Rates at checkout is enabled for your channel on Bob Go. Please visit '
                            . '<a href="https://my.bobgo.co.za/rates-at-checkout?tab=settings" target="_new">Bob '
                            . 'Go</a> and make sure your WooCommerce channel is enabled to receive rates.')
                    );
                }
            }
        }
    }
}