<?php
/**
 * 2007-2023 PrestaShop
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Academic Free License (AFL 3.0)
 * that is bundled with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://opensource.org/licenses/afl-3.0.php
 * 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 http://www.prestashop.com for more information.
 *
 * @author    PrestaShop SA <contact@prestashop.com>
 * @copyright 2007-2023 PrestaShop SA
 * @license   http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
 *  International Registered Trademark & Property of PrestaShop SA
 */

use PrestaShop\Module\AgileMultisellerPro\Controller\Front\AgileModuleFrontController;

if (!defined('_PS_VERSION_')) {
    exit;
}

class AgileMultiSellerProAjaxProductsListModuleFrontController extends AgileModuleFrontController
{
    public $ajax = true;

    public function init()
    {
        parent::init();

        if (!isset($this->context->customer)
            || !$this->context->customer->id
            || !$this->context->customer->isLogged()
        ) {
            exit('Permission Denied');
        }

        $id_sellerinfo = $this->sellerinfo->getIdSellerinfo();

        $query = Tools::getValue('q', false);

        if (!$query || $query == '' || Tools::strlen($query) < 1) {
            exit;
        }

        if ($pos = strpos($query, ' (ref:')) {
            $query = Tools::substr($query, 0, $pos);
        }

        $excludeIds = Tools::getValue('excludeIds', false);

        if ($excludeIds && $excludeIds != 'NaN') {
            $excludeIds = implode(',', array_map('intval', explode(',', $excludeIds)));
        } else {
            $excludeIds = '';
        }

        $includepublicproduct = (int) Tools::getValue('includepublicproduct');

        $excludeVirtuals = (bool) Tools::getValue('excludeVirtuals', false);

        $sql = 'SELECT p.`id_product`, `reference`, pl.name
        FROM `' . _DB_PREFIX_ . 'product` p
                INNER JOIN `' . _DB_PREFIX_ . 'sellerinfo_product` sip ON (p.id_product=sip.id_product AND sip.id_sellerinfo IN (' .
            ($includepublicproduct == 1 ? 0 : $id_sellerinfo) . ',' . $id_sellerinfo . '))
                LEFT JOIN `' . _DB_PREFIX_ . 'product_lang` pl ON (pl.id_product = p.id_product AND pl.id_lang = ' .
            (int) $this->context->language->id . Shop::addSqlRestrictionOnLang('pl') . ')
                WHERE (pl.name LIKE \'%' . pSQL($query) . '%\' OR p.reference LIKE \'%' . pSQL($query) . '%\')' .
            (!empty($excludeIds) ? ' AND p.id_product NOT IN (' . $excludeIds . ') ' : ' ') .
            ($excludeVirtuals ? 'AND p.id_product NOT IN (SELECT pd.id_product FROM `' . _DB_PREFIX_ .
                'product_download` pd WHERE (pd.id_product = p.id_product))' : '');

        $items = Db::getInstance()->executeS($sql);

        if ($items) {
            foreach ($items as $item) {
                echo trim($item['name']) . (!empty($item['reference']) ? ' (ref: ' . $item['reference'] . ')' : '') .
                    '|' . (int) $item['id_product'] . "\n";
            }
        }

        exit;
    }
}
