<?php
/**
 * Copyright since 2007 PrestaShop SA and Contributors
 * PrestaShop is an International Registered Trademark & Property of PrestaShop SA
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Open Software License (OSL 3.0)
 * that is bundled with this package in the file LICENSE.md.
 * It is also available through the world-wide-web at this URL:
 * https://opensource.org/licenses/OSL-3.0
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@prestashop.com so we can send you a copy immediately.
 *
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade PrestaShop to newer
 * versions in the future. If you wish to customize PrestaShop for your
 * needs please refer to https://devdocs.prestashop.com/ for more information.
 *
 * @author    PrestaShop SA and Contributors <contact@prestashop.com>
 * @copyright Since 2007 PrestaShop SA and Contributors
 * @license   https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0)
 */
class HelperShopCore extends Helper
{
    /**
     * Render shop list.
     *
     * @return string
     */
    public function getRenderedShopList()
    {
        if (!Shop::isFeatureActive() || Shop::getTotalShops(false, null) < 2) {
            return '';
        }

        $shop_context = Shop::getContext();
        $context = Context::getContext();

        if ($this->noShopSelection()) {
            $current_shop_value = '';
        } elseif ($shop_context == Shop::CONTEXT_GROUP) {
            $current_shop_value = 'g-' . Shop::getContextShopGroupID();
        } else {
            $current_shop_value = 's-' . Shop::getContextShopID();
        }

        $tpl = $this->createTemplate('helpers/shops_list/list.tpl');
        $tpl->assign([
            'link' => $context->link,
            'tree' => Shop::getTree(),
            'current_shop_name' => $this->getCurrentShopName(),
            'current_shop_value' => $current_shop_value,
            'multishop_context' => $context->controller->multishop_context,
            'multishop_context_group' => $context->controller->multishop_context_group,
            'is_shop_context' => ($context->controller->multishop_context & Shop::CONTEXT_SHOP),
            'is_group_context' => ($context->controller->multishop_context & Shop::CONTEXT_GROUP),
            'is_all_context' => ($context->controller->multishop_context & Shop::CONTEXT_ALL),
            'shop_context' => $shop_context,
            'url' => $_SERVER['REQUEST_URI'] . (($_SERVER['QUERY_STRING']) ? '&' : '?') . 'setShopContext=',
        ]);

        return $tpl->fetch();
    }

    public function getCurrentShopName()
    {
        $shop_context = Shop::getContext();
        $tree = Shop::getTree();

        $current_shop_name = '';
        if ($this->noShopSelection()) {
            $current_shop_name = Translate::getAdminTranslation('All stores');
        } elseif ($shop_context == Shop::CONTEXT_GROUP) {
            $current_shop_name = sprintf(Translate::getAdminTranslation('%s group'), $tree[Shop::getContextShopGroupID()]['name']);
        } else {
            foreach ($tree as $group_data) {
                foreach ($group_data['shops'] as $shop_id => $shop_data) {
                    if ($shop_id == Shop::getContextShopID()) {
                        $current_shop_name = $shop_data['name'];

                        break;
                    }
                }
            }
        }

        return $current_shop_name;
    }

    /**
     * @return bool
     */
    protected function noShopSelection()
    {
        $shop_context = Shop::getContext();
        $context = Context::getContext();

        return $shop_context == Shop::CONTEXT_ALL ||
        ($context->controller->multishop_context_group == false && $shop_context == Shop::CONTEXT_GROUP);
    }
}
