package com.loremind.domain.lorecontext;

import lombok.Builder;
import lombok.Data;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

/**
 * Entité de domaine représentant un Template pour la génération de Pages.
 *
 * Un Template :
 *  - appartient à un Lore (loreId)
 *  - définit le noeud par défaut où seront rangées les Pages créées (defaultNodeId)
 *  - porte une liste ordonnée de noms de champs dynamiques (fields)
 *    qui seront instanciés sur chaque Page produite depuis ce gabarit.
 *
 * Entité pure du domaine : aucune dépendance technique (Spring, JPA, etc.).
 */
@Data
@Builder
public class Template {

    private String id;
    private String loreId;            // Rattachement au Lore propriétaire
    private String name;
    private String description;
    private String defaultNodeId;     // Noeud cible des Pages générées
    private List<String> fields;      // Noms des champs dynamiques (ordonnés)
    private LocalDateTime createdAt;
    private LocalDateTime updatedAt;

    // --- Méthodes métier ---------------------------------------------------

    /** Nombre de champs dynamiques définis (affiché dans le sidebar "X champs"). */
    public int fieldCount() {
        return fields == null ? 0 : fields.size();
    }

    /** Ajoute un champ à la fin de la liste (ignore les doublons et les blancs). */
    public void addField(String fieldName) {
        if (fieldName == null || fieldName.isBlank()) {
            return;
        }
        if (fields == null) {
            fields = new ArrayList<>();
        }
        if (!fields.contains(fieldName)) {
            fields.add(fieldName);
            this.updatedAt = LocalDateTime.now();
        }
    }

    /** Retire un champ s'il existe. */
    public void removeField(String fieldName) {
        if (fields != null && fields.remove(fieldName)) {
            this.updatedAt = LocalDateTime.now();
        }
    }
}
