<?php

namespace Opencart\Catalog\Controller\Common;

class FranklinFeatured extends \Opencart\System\Engine\Controller {

    public function index(): string {

        $this->load->language('product/product');

        $this->load->model('catalog/product');
        $this->load->model('tool/image');

        $language = $this->config->get('config_language');
        $currency = $this->session->data['currency']
            ?? $this->config->get('config_currency');

        $data['products'] = [];

        $data['cart'] = $this->url->link(
            'common/cart.info',
            'language=' . $language
        );

        $data['cart_add'] = $this->url->link(
            'checkout/cart.add',
            'language=' . $language
        );

        $data['wishlist_add'] = $this->url->link(
            'account/wishlist.add',
            'language=' . $language
        );

        $limit = 12;

        $filter_data = [
            'sort'  => 'p.date_added',
            'order' => 'DESC',
            'start' => 0,
            'limit' => 500
        ];

        $results = $this->model_catalog_product->getProducts($filter_data);

        shuffle($results);
        $results = array_slice($results, 0, $limit);

        foreach ($results as $result) {

            if (!empty($result['image']) && is_file(DIR_IMAGE . $result['image'])) {
                $image = $this->model_tool_image->resize(
                    $result['image'],
                    500,
                    500
                );
            } else {
                $image = $this->model_tool_image->resize(
                    'placeholder.png',
                    500,
                    500
                );
            }

            if ($this->customer->isLogged()
                || !$this->config->get('config_customer_price')) {

                $price = $this->currency->format(
                    $this->tax->calculate(
                        $result['price'],
                        $result['tax_class_id'],
                        $this->config->get('config_tax')
                    ),
                    $currency
                );
            } else {
                $price = false;
            }

            if ((float)$result['special']) {
                $special = $this->currency->format(
                    $this->tax->calculate(
                        $result['special'],
                        $result['tax_class_id'],
                        $this->config->get('config_tax')
                    ),
                    $currency
                );
            } else {
                $special = false;
            }

            if ($this->config->get('config_review_status')) {
                $rating = (int)$result['rating'];
            } else {
                $rating = false;
            }

            $minimum = !empty($result['minimum'])
                ? max(1, (int)$result['minimum'])
                : 1;

            $data['products'][] = [
                'product_id'  => (int)$result['product_id'],
                'thumb'       => $image,
                'name'        => $result['name'],
                'description' => oc_substr(
                    strip_tags(
                        html_entity_decode(
                            $result['description'],
                            ENT_QUOTES,
                            'UTF-8'
                        )
                    ),
                    0,
                    120
                ) . '...',
                'price'       => $price,
                'special'     => $special,
                'rating'      => $rating,
                'minimum'     => $minimum,
                'href'        => $this->url->link(
                    'product/product',
                    'language=' . $language
                    . '&product_id=' . (int)$result['product_id']
                )
            ];
        }

        return $this->load->view('extension/module/featured', $data);
    }
}