<?php

/*
 * This file is part of the Serenity package.
 *
 * (c) CP Creation <web@cpcreation.fr>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Serenity\CoreBundle\Shared\Common;

/**
 * Interface ConfigInterface.
 *
 * Contrat définissant la structure minimale d’un objet de configuration
 * sérialisable (souvent stocké au format JSON ou JSONB) dans la base de données.
 *
 * ## Objectif
 * Cette interface permet d’uniformiser la gestion des configurations
 * entre les différents bundles Serenity :
 * - Centralisation et typage des paramètres applicatifs ;
 * - Sérialisation cohérente des entités de configuration ;
 * - Gestion différenciée entre configurations globales et spécifiques au SaaS.
 *
 * ## Détails :
 * - `getName()` : identifie la configuration par un nom unique (ex. `payment`, `notification`, `theme`) ;
 * - `isSaasIdentifierConfig()` : indique si la configuration doit être liée à un identifiant SaaS
 *   (ex. multi-tenant) ou si elle est globale au système.
 */
interface ConfigInterface
{
    /**
     * Retourne le nom unique de la configuration.
     *
     * Ce nom sert de clé d’identification logique dans le système.
     */
    public function getName(): string;

    /**
     * Indique si la configuration est liée à un identifiant SaaS.
     *
     * - true  => configuration spécifique à un tenant / instance SaaS ;
     * - false => configuration globale au système.
     */
    public function isSaasIdentifierConfig(): bool;
}
