<?php

namespace PrestaShop\Module\LCVPrestaTheme\Controllers\Admin;

use Symfony\Component\HttpFoundation\Request;
use PrestaShop\Module\LCVPrestaTheme\Forms\{GeneralType, TrackingType,HeaderType, FooterType, PopUpType,CssType,StoreType,LivraisonType,TopBandeauType,TopBandeauParameterType,ResauxType};
use PrestaShop\Module\LCVPrestaTheme\Config\ConfigTheme;

/**
 * AdminGeneralController
 * 
 * Contrôleur pour la configuration genérale du thème LCVPrestaTheme.
 * Permet de gérer les paramètres généraux, le header, le footer , varibale css.
 */
class AdminGeneralController extends AdminFormController
{
    /**
     * ConfigurationAction
     * 
     * Permet au client de choisir un thème parmi les 3 disponibles , choisir la couleur principale et la couleur secondaire , et les polices à utiliser.
     * 
     * 
     * @param Request $request
     */
    public function ConfigurationGeneralAction(Request $request)
    {
        return $this->CreateConfigurationForm(
            $request,
            GeneralType::class,                                          // Type de formulaire
            '\PrestaShop\Module\LCVPrestaTheme\Config\ConfigGeneral',       // Classe de configuration
            '0',                                                         // ID de la configuration
            null,                                                        // Pas d'action spécifique
            'configGeneral',                                             // Nom du tableau
            'admin_presta_general',                                      // Pas de redirection spécifique
            null,                                                        // Pas d'image à uploader
            'Configuration général du theme'                             // Titre de la page
        );
    }

    /**
     * ConfigurationHeaderAction
     * 
     * Permet au client de configurer un header parmi les 3 disponibles
     * 
     * @param Request $request
     */
    public function ConfigurationHeaderAction(Request $request)
    {
        return $this->CreateConfigurationForm(
            $request,
            HeaderType::class,                                           // Type de formulaire pour le header
            '\PrestaShop\Module\LCVPrestaTheme\Config\ConfigHeader',        // Classe de configuration
            '0',                                                         // ID de la configuration
            null,                                                        // Pas d'action spécifique
            'configHeader',                                              // Nom du tableau
            null,                                                        // Pas de redirection spécifique
            null,                                                        // Pas d'image à uploader
            'Choississez une en-tete'                                    // Titre de la page
        );
    }

    /**
     * ConfigurationFooterAction
     * 
     * Permet au client de configurer un footer parmi les 3 disponibles
     * 
     * @param Request $request
     */
    public function ConfigurationFooterAction(Request $request)
    {
        return $this->CreateConfigurationForm(
            $request,
            FooterType::class,                                           // Type de formulaire pour le footer
            '\PrestaShop\Module\LCVPrestaTheme\Config\ConfigFooter',        // Classe de configuration
            '0',                                                         // ID de la configuration
            null,                                                        // Pas d'action spécifique
            'configFooter',                                              // Nom du tableau
            null,                                                        // Pas de redirection spécifique
            null,                                                        // Pas d'image à uploader
            'Choississez un pied de page'                                // Titre de la page
        );
    }

    /**
     * ConfigurationGoogleTagManagerAction
     * 
     * @param Request $request
     */
    public function ConfigurationGoogleTagManagerAction(Request $request)
    {
        return $this->CreateConfigurationForm(
            $request,
            TrackingType::class,                                           // Type de formulaire
            '\PrestaShop\Module\LCVPrestaTheme\Config\ConfigTracking',        // Classe de configuration
            '0',                                                         // ID de la configuration
            null,                                                        // Pas d'action spécifique
            'configTracking',                                              // Nom du tableau
            null,                                                        // Pas de redirection spécifique
            null,                                                        // Pas d'image à uploader
            'Configuration du suivi de votre site internet'              // Titre de la page
        );
    }

    public function ConfigurationPopUpAction(Request $request)
    {
        return $this->CreateConfigurationForm(
            $request,
            PopUpType::class,                                           // Type de formulaire
            '\PrestaShop\Module\LCVPrestaTheme\Config\ConfigPopUp',        // Classe de configuration
            '0',                                                         // ID de la configuration
            null,                                                        // Pas d'action spécifique
            'configPopUp',                                              // Nom du tableau
            'admin_presta_popup',                                      // Pas de redirection spécifique
            true,                                                        // Pas d'image à uploader
            'Configuration du pop-up'                                   // Titre de la page
        );
    }


    public function ConfigurationCssAction(Request $request){
        return $this->CreateConfigurationForm(
            $request,
            CssType::class,                                               // Type de formulaire
            '\PrestaShop\Module\LCVPrestaTheme\Config\ConfigCss',           // Classe de configuration
            '0',                                                         // ID de la configuration
            null,                                                   // Action spécifique pour sauvegarder le CSS
            'configCss',                                                 // Nom du tableau
            'admin_presta_css',                                          // Redirection spécifique après sauvegarde
            false,                                                       // Pas d'image à uploader
            'Personnalisation du CSS'                                    // Titre de la page
        );
    }

    public function ConfigurationStoreAction(Request $request ,$id , $action)
    {
        return $this->CreateConfigurationForm(
            $request,
            StoreType::class,                                             // Type de formulaire
            '\PrestaShop\Module\LCVPrestaTheme\Config\ConfigStore',         // Classe de configuration
            $id,                                                         // ID de la configuration
            $action,                                                        // Pas d'action spécifique
            'configStore',                                              // Nom du tableau
            'admin_presta_show_store',                                      // Pas de redirection spécifique
            true,                                                        // Pas d'image à uploader
            'Sélection du magasin'                                      // Titre de la page
        );
    }


    /**
     * showStoreAction
     * 
     * Affichage des magasins configurés
     * 
     */
    public function showStoreAction()
    {
        // Chargement de la configuration
        $config = ConfigTheme::load();

        // Retourne la vue avec les magasins configurés
        return $this->render('@Modules/lcvprestatheme/views/templates/admin/show_store.html.twig', [
            'stores' => $config->configStore
        ]);
    }


    /**
     * ConfigurationLivraisonAction
     * 
     * Permet au client de configurer la section de livraison
     * 
     * @param Request $request
     */
    public function ConfigurationLivraisonAction(Request $request)
    {
        return $this->CreateConfigurationForm(
            $request,
            LivraisonType::class, // Type de formulaire pour la livraison
            '\PrestaShop\Module\LCVPrestaTheme\Config\ConfigLivraison', // Classe de configuration
            '0', // ID de la configuration
            null, // Pas d'action spécifique
            'configLivraison', // Nom du tableau
            null, // Pas de redirection spécifique
            null, // Pas d'image à uploader
            'Configuration des informations de livraison' // Titre de la page
        );
    }


    
    /**
     * ConfigurationTopBandeauAction
     * 
     * Permet au client de configurer le bandeau supérieur
     * 
     * @param Request $request
     * @param int $id L'ID du bandeau
     * @param string $action Action à effectuer (ajouter, modifier, supprimer)
     */
    public function ConfigurationTopBandeauAction(Request $request, int $id, $action){
        return $this->CreateConfigurationForm(
            $request,
            TopBandeauType::class, // Type de formulaire pour la rassurance
            '\PrestaShop\Module\LCVPrestaTheme\Config\ConfigTopBandeau', // Classe de configuration
            $id, // ID de la rassurance
            $action, // Action à effectuer
            'configTopBandeau', // Nom du tableau
            'admin_presta_show_bandeau', // Redirection après traitement
            true, // L'image doit être uploadée
            'Configuration des éléments du bandeau supérieur' // Titre de la page
        );
    }


    /**
     * ShowTopBandeauAction
     * 
     * Affiche les éléments du bandeau 
     * 
     */
    public function ShowTopBandeauAction()
    {
        // Chargement de la configuration
        $config = ConfigTheme::load();

        // Retourne la vue avec les rassurances configurées
        return $this->render('@Modules/lcvprestatheme/views/templates/admin/show_top_bandeau.html.twig', [
            'bandeaux' => $config->configTopBandeau
        ]);
    }

    /**
     * ParameterTopBandeauAction
     * 
     * Permet au client de configurer les paramètres du bandeau supérieur(couleur,visibilité etc ...)
     * 
     * @param Request $request
     */
    public function ParameterTopBandeauAction(Request $request){
        
        return $this->CreateConfigurationForm(
            $request,
            TopBandeauParameterType::class, // Type de formulaire pour le footer
            '\PrestaShop\Module\LCVPrestaTheme\Config\ConfigTopBandeauParameter', // Classe de configuration
            '0',  // ID de la configuration
            null, // Pas d'action spécifique
            'configTopBandeauParameter', // Nom du tableau
            'admin_presta_show_bandeau',  // Pas de redirection spécifique
            null,   // Pas d'image à uploader
            'Choississez les paramètres du bandeau supérieur' // Titre de la page
        );
    }


    /**
     * ConfigurationResauxAction
     * 
     * Permet au client de configurer les logos des réseaux sociaux
     * 
     * @param Request $request
     * @param int $id L'ID de la configuration des réseaux sociaux
     * @param string $action Action à effectuer (ajouter, modifier, supprimer)
     */
    public function ConfigurationResauxAction(Request $request, int $id, $action)
    {
        return $this->CreateConfigurationForm(
            $request,
            ResauxType::class, // Type de formulaire pour les réseaux sociaux
            '\PrestaShop\Module\LCVPrestaTheme\Config\ConfigResaux', // Classe de configuration
            $id, // ID de la configuration
            $action, // Action à effectuer (ajout, modification, suppression)
            'configResaux', // Nom du tableau de configuration
            'admin_presta_show_resaux', // Redirection après traitement
            true, // L'image doit être uploadée
            'Configuration des liens vers les réseaux sociaux' // Titre de la page
        );
    }


    /**
     * showResauxAction
     * 
     * Affiche les logos des réseaux sociaux configurés
     * 
     */
    public function showResauxAction()
    {
        // Chargement de la configuration
        $config = ConfigTheme::load();

        // Retourne la vue avec les réseaux sociaux configurés
        return $this->render('@Modules/lcvprestatheme/views/templates/admin/show_resaux.html.twig', [
            'resaux' => $config->configResaux
        ]);
    }


    


    
}
