Current File : /var/www/vinorea/modules/psxdesign/src/Config/PsxDesignConfig.php
<?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)
 */

declare(strict_types=1);

namespace PrestaShop\Module\PsxDesign\Config;

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

class PsxDesignConfig
{
    // General offten needed values
    public const CLASSIC_THEME_NAME = 'classic';

    // Generated stylesheet files path and file names
    public const TMP_DIR_NAME = 'tmp';
    public const CUSTOM_STYLESHEETS_PATH = 'views/assets/customs/';
    public const COLORS_CSS_SELECTOR_STYLESHEET_FILE_NAME = 'psxdesign-colors-css-selectors.css';
    public const COLORS_CSS_VARIABLE_STYLESHEET_FILE_NAME = 'psxdesign-colors-css-variables.css';
    public const COLORS_SCSS_VARIABLE_STYLESHEET_FILE_NAME = '_psxdesign-variables.scss';
    public const FONTS_CSS_SELECTOR_STYLESHEET_FILE_NAME = 'psxdesign-fonts-css-selectors.css';
    public const FONTS_CSS_VARIABLE_STYLESHEET_FILE_NAME = 'psxdesign-fonts-css-variables.css';
    public const COMPILED_THEME_FILE_NAME = 'psxdesign-compiled-theme.css';
    public const SCSS_VARIABLE = 'scss_variable';
    public const CSS_VARIABLE = 'css_variable';
    public const CSS_SELECTOR = 'css_selector';
    public const COLORS_TYPES = [
        self::CSS_VARIABLE,
        self::CSS_SELECTOR,
        self::SCSS_VARIABLE,
    ];
    public const FONTS_TYPES = [
        self::CSS_VARIABLE,
        self::CSS_SELECTOR,
    ];

    /**
     * @param string $fileName
     * @param string $content
     *
     * @return string|null
     */
    public static function generateStylesheetHashedPathByFileName(string $fileName, string $content): ?string
    {
        $baseFileNameInfo = pathinfo($fileName);

        $hash = substr(hash('sha256', $content), 0, 10);

        return $baseFileNameInfo['filename'] . '-' . $hash . '.' . $baseFileNameInfo['extension'];
    }

    /**
     * @param string $fileName
     * @param string $modulePath
     *
     * @return string|null
     */
    public static function getHashedStylesheetPathByFileName(string $fileName, string $modulePath): ?string
    {
        $baseFileNameInfo = pathinfo($fileName);

        $matchingFiles = glob($modulePath . self::CUSTOM_STYLESHEETS_PATH . $baseFileNameInfo['filename'] . '*.' . $baseFileNameInfo['extension']);

        if (!empty($matchingFiles)) {
            return $matchingFiles[0];
        }

        return null;
    }

    /**
     * @param string $modulePath
     *
     * @return string[]
     */
    public static function getColorsStylesheetsPaths(string $modulePath): array
    {
        return [
            self::getHashedStylesheetPathByFileName(self::COLORS_CSS_SELECTOR_STYLESHEET_FILE_NAME, $modulePath),
            self::getHashedStylesheetPathByFileName(self::COLORS_CSS_VARIABLE_STYLESHEET_FILE_NAME, $modulePath),
            self::getHashedStylesheetPathByFileName(self::COMPILED_THEME_FILE_NAME, $modulePath),
        ];
    }

    /**
     * @param string $modulePath
     *
     * @return string[]
     */
    public static function getFontsStylesheetsPaths(string $modulePath): array
    {
        return [
            self::getHashedStylesheetPathByFileName(self::FONTS_CSS_SELECTOR_STYLESHEET_FILE_NAME, $modulePath),
            self::getHashedStylesheetPathByFileName(self::FONTS_CSS_VARIABLE_STYLESHEET_FILE_NAME, $modulePath),
        ];
    }

    /**
     * @param string $type
     *
     * @return string
     */
    public static function getColorsStylesheetFileNameByType(string $type): ?string
    {
        switch ($type) {
            case self::CSS_VARIABLE:
                return self::COLORS_CSS_VARIABLE_STYLESHEET_FILE_NAME;
            case self::CSS_SELECTOR:
                return self::COLORS_CSS_SELECTOR_STYLESHEET_FILE_NAME;
            case self::SCSS_VARIABLE:
                return self::COLORS_SCSS_VARIABLE_STYLESHEET_FILE_NAME;
            default:
                return null;
        }
    }

    /**
     * @param string $type
     *
     * @return string
     */
    public static function getFontsStylesheetFileNameByType(string $type): ?string
    {
        switch ($type) {
            case self::CSS_VARIABLE:
                return self::FONTS_CSS_VARIABLE_STYLESHEET_FILE_NAME;
            case self::CSS_SELECTOR:
                return self::FONTS_CSS_SELECTOR_STYLESHEET_FILE_NAME;
            default:
                return null;
        }
    }
}