<?php 
/**
 * 
 */

declare(strict_types=1);

namespace PrestaShop\Module\LCVPrestaTheme\Config;

/**
 *  parametrage categorie mise en avant
 */
class ConfigSlider{

    /**
     * id unique des sliders
     *
     * @var int
     */
    public $id;

    /**
     * titre du slider 
     *
     * @var string
     */
    public $title = '';


    /**
     * sous titre du slider  
     *
     * @var string
     */
    public $subTitle = '';


    /**
     * id vers le lien de la categorie
     *
     * @var string
     */
    public $url = '';


    /**
     * chemin vers l'image a afficher en lieu et place de celle de la catégorie prestashop
     *
     * @var string
     */
    public $image = '';


     /**
     * show button 
     *
     * @var string
     */
    public $button = '';


     /**
     * visibilité du bloc 
     *
     * @var bool
     */
    public $isVisible = true;


     /**
     * position du texte sur le slider
     *
     * @var string
     */
    public $textPosition = '';



    public function injectIntoGroup(ConfigTheme $config, string $action, ?int $id, ?int $group_id): void
    {
        if ($group_id === null) {
            throw new \Exception('group_id manquant');
        }

        // Recherche du groupe par ID métier
        $group = null;

        foreach ($config->configSliderGroup as $g) {
            if ((int)$g->id === (int)$group_id) {
                $group = $g;
                break;
            }
        }

        if ($group === null) {
            throw new \Exception('CategoryGroup introuvable');
        }

        // Initialise les items si nécessaire
        if (!isset($group->items) || !is_array($group->items)) {
            $group->items = [];
        }

        $items = &$group->items;

        // ADD
        if ($action === 'add') {
            $items[] = $this;
            return;
        }

        //  EDIT
        if ($action === 'edit') {

            foreach ($items as $index => $item) {

                // On compare les ID métier
                if ((int)$item["id"] === (int)$this->id) {

                    // On remplace l'ancien item par le nouveau
                    $items[$index] = $this;
                    return;
                }
            }

            throw new \Exception('Item introuvable pour modification');
        }

        //  DELETE
        if ($action === 'delete') {
            
            foreach ($items as $index => $item) {
                if ((int)$item['id']=== (int)$this->id) {
                    
                    unset($items[$index]);
                    $group->items = array_values($group->items);

                    return;
                }
            }

            return;
        }

        throw new \Exception('Action invalide');
    }





}
