<?php
/**
* 2023 Anvanto
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
*
*  @author    Anvanto <anvantoco@gmail.com>
*  @copyright 2023 Anvanto
*  @license   http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
*/

require_once _PS_MODULE_DIR_ . 'an_homeslider/classes/anHomeSliderFiles.php';

class anHomeSliders extends ObjectModel
{
      /**
     * @var int
     */
    public $id_slider;
    /**
     * @var int
     */
    public $id;
    /**
     * @var int
     */
    public $active = 1;
    
    public $title_slider;
    public $hook;

    public $preloader = 1;

    public $preloader_height_1920 = 500;
    public $preloader_height_1600 = 500;
    public $preloader_height_1366 = 500;
    public $preloader_height_991 = 300;
    public $preloader_height_767 = 300;

    public $preloader_mobile_height_580 = 260;
    public $preloader_mobile_height_440 = 192;
    public $preloader_mobile_height_320 = 134; 

    public $lazy_load = 1;

    public $loop = 1;
    public $nav = 1;
    public $dots = 1;
    public $autoplay = 1;

    public $smartspeed = 1000;

    public $autoplay_timeout = 5000;

    public $responsive_image = 1;

    public $show_on;
    public $show_content_on;
    /**
     * @var array
     */
    public static $definition = [
        'table' => 'an_homeslider_sliders',
        'primary' => 'id_slider',
        'multilang' => true,
        'fields' => [
            
            'id_slider' => ['type' =>self::TYPE_INT ],
            'active' => ['type' => self::TYPE_BOOL, 'validate' => 'isBool'],
            'title_slider' => ['type' =>self::TYPE_STRING, 'lang' => true ],
            'hook' => ['type' =>self::TYPE_STRING],

            'preloader' => ['type' => self::TYPE_BOOL, 'validate' => 'isBool'],

            'preloader_height_1920' => ['type' =>self::TYPE_INT ],
            'preloader_height_1600' => ['type' =>self::TYPE_INT ],
            'preloader_height_1366' => ['type' =>self::TYPE_INT ],
            'preloader_height_991' => ['type' =>self::TYPE_INT ],
            'preloader_height_767' => ['type' =>self::TYPE_INT ],

            'preloader_mobile_height_580' => ['type' =>self::TYPE_INT ],
            'preloader_mobile_height_440' => ['type' =>self::TYPE_INT ],
            'preloader_mobile_height_320' => ['type' =>self::TYPE_INT ],

            'lazy_load' => ['type' => self::TYPE_BOOL, 'validate' => 'isBool'],

            'loop' => ['type' => self::TYPE_BOOL, 'validate' => 'isBool'],
            'nav' => ['type' => self::TYPE_BOOL, 'validate' => 'isBool'],
            'dots' => ['type' => self::TYPE_BOOL, 'validate' => 'isBool'],
            'autoplay' => ['type' => self::TYPE_BOOL, 'validate' => 'isBool'],

            'smartspeed' => ['type' =>self::TYPE_INT ],

            'autoplay_timeout' => ['type' =>self::TYPE_INT ],

            'responsive_image' => ['type' => self::TYPE_BOOL, 'validate' => 'isBool'],

            'show_on' => ['type' =>self::TYPE_INT ],
            'show_content_on' => ['type' =>self::TYPE_INT ], 
        ],
    ];

    /**
     * Formula constructor.
     *
     * @param null $id
     */
    public function __construct($id = null, $id_lang = null)
    {
        parent::__construct($id, $id_lang);
    }

    public static function getSliders($hookName = '', $pathImg = true, $allShops = false)
    {
		$sql = '
		SELECT * FROM `' . _DB_PREFIX_ . 'an_homeslider_sliders` sw
		LEFT JOIN `' . _DB_PREFIX_ . 'an_homeslider_sliders_lang` sl 
			ON (sw.`id_slider` = sl.`id_slider`
            AND sl.`id_lang` = ' . (int) Context::getContext()->language->id . ')
		WHERE sw.`active`=1
		';	

        if ($hookName != 'all') {
            $sql .= 'AND sw.`hook` = "'.pSQL($hookName).'"';
        }

		if (Shop::isFeatureActive() && !$allShops) {
			$sql .= ' AND sw.`id_slider` IN (
				SELECT hs.`id_slider`
				FROM `' . _DB_PREFIX_ . 'an_homeslider_sliders_shop` hs
				WHERE hs.id_shop IN (' . implode(', ', Shop::getContextListShopID()) . ')
			)';
		}	
		
		$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);  

        foreach ($result as $id => $item) {
            $result[$id]['slides'] = anHomeSlides::getSlides($item['id_slider'], $pathImg, $allShops);
        }

        return $result;
    }

    public static function exportJsonSliders($fileManager)
	{
		$sliders = self::getSliders('all', false);	
        foreach ($sliders as $sliderId => $slider){
            foreach ($slider['slides'] as $slideId => $slide){
                $sliders[$sliderId]['slides'][$slideId]['link'] = '#';
            }            
        }
        
		@file_put_contents($fileManager->getContentFilePath(), json_encode($sliders, JSON_PRETTY_PRINT));
	}	

	public static function importJsonSliders($fileManager)
	{
		$data = json_decode($fileManager->getContentFile(), true);
		$context = Context::getContext();

        if (self::getCountSliders() > 0){
            return false;
        }
        
		if ($data){
			
			foreach ($data as $item){
                
				$sliderObj = new anHomeSliders();
				$sliderObj->active = $item['active'];
                $sliderObj->hook = $item['hook'];
                Module::getInstanceByName('an_homeslider')->registerHook($item['hook']);

                $sliderObj->preloader = $item['preloader'];

                $sliderObj->preloader_height_1920 = $item['preloader_height_1920'];
                $sliderObj->preloader_height_1600 = $item['preloader_height_1600'];
                $sliderObj->preloader_height_1366 = $item['preloader_height_1366'];
                $sliderObj->preloader_height_991 = $item['preloader_height_991'];
                $sliderObj->preloader_height_767 = $item['preloader_height_767'];

                $sliderObj->preloader_mobile_height_580 = '';
                if (isset($item['preloader_mobile_height_580'])){
                    $sliderObj->preloader_mobile_height_580 = $item['preloader_mobile_height_580'];
                }

                $sliderObj->preloader_mobile_height_440 = '';
                if (isset($item['preloader_mobile_height_440'])){
                    $sliderObj->preloader_mobile_height_440 = $item['preloader_mobile_height_440'];
                }

                $sliderObj->preloader_mobile_height_320 = '';
                if (isset($item['preloader_mobile_height_320'])){
                    $sliderObj->preloader_mobile_height_320 = $item['preloader_mobile_height_320'];
                }

                $sliderObj->lazy_load = $item['lazy_load'];
                $sliderObj->loop = $item['loop'];
                $sliderObj->nav = $item['nav'];
                $sliderObj->dots = $item['dots'];
                $sliderObj->autoplay = $item['autoplay'];
                $sliderObj->smartspeed = $item['smartspeed'];
                $sliderObj->autoplay_timeout = $item['autoplay_timeout'];
                $sliderObj->responsive_image = $item['responsive_image'];
                $sliderObj->show_on = $item['show_on'];
                $sliderObj->show_content_on = $item['show_content_on'];

				$languages = Language::getLanguages();
				foreach ($languages as $language) {
					$sliderObj->title_slider[$language['id_lang']] = $item['title_slider'];
				}				
				$sliderObj->save();

                anHomeSlides::importJsonSlides($item['slides'], $sliderObj->id);

                Db::getInstance()->insert('an_homeslider_sliders_shop', [
                    'id_slider' => (int) $sliderObj->id, 
                    'id_shop' => (int) Context::getContext()->shop->id
                ]); 
			}
		}
	} 
    
    public static function getCountSliders()
    {
		$sql = '
		SELECT count(*) FROM `' . _DB_PREFIX_ . 'an_homeslider_sliders` sw
		LEFT JOIN `' . _DB_PREFIX_ . 'an_homeslider_sliders_lang` sl 
			ON (sw.`id_slider` = sl.`id_slider`
            AND sl.`id_lang` = ' . (int) Context::getContext()->language->id . ')

		';	

		if (Shop::isFeatureActive()) {
			$sql .= ' WHERE sw.`id_slider` IN (
				SELECT hs.`id_slider`
				FROM `' . _DB_PREFIX_ . 'an_homeslider_sliders_shop` hs
				WHERE hs.id_shop IN (' . implode(', ', Shop::getContextListShopID()) . ')
			)';
		}	
		
		return Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($sql);  

    }
}