package dev.fyloz.trial.colorrecipesexplorer.service;

import dev.fyloz.trial.colorrecipesexplorer.model.Model;

import java.util.Collection;
import java.util.List;

public interface IGenericJavaService<T extends Model> {

    /**
     * Vérifie si une entité correspondant à un identifiant existe.
     *
     * @param id L'identifiant de l'entité
     * @return Si un entité correspondant à l'identifiant existe
     */
    boolean existsById(Long id);

    /**
     * Récupère toutes les entités de type T.
     *
     * @return Toutes les entités de type T
     */
    List<T> getAll();

    /**
     * Récupère l'entité de type T correspondant à un identifiant.
     *
     * @param id L'identifiant de l'entité
     * @return L'entité correspondant à l'identifiant
     */
    T getById(Long id);

    /**
     * Crée une entité.
     *
     * @param entity L'entité à créer
     * @return L'entité créée
     */
    T save(T entity);

    /**
     * Crée plusieurs entités.
     *
     * @param entities Les entités à créer
     * @return Les entités créées
     */
    Collection<T> saveAll(Collection<T> entities);

    /**
     * Met à jour une entité dans le stockage.
     *
     * @param entity L'entité à mettre à jour
     * @return L'entité mise à jour
     */
    T update(T entity);

    /**
     * Supprime une entité.
     *
     * @param entity L'entité à supprimer
     */
    void delete(T entity);

    /**
     * Supprime une entité correspondant à l'identifiant.
     *
     * @param id L'identifiant de l'entité à supprimer
     */
    void deleteById(Long id);

    /**
     * Supprime plusieurs entités.
     *
     * @param entities Les entités à supprimer
     */
    void deleteAll(Collection<T> entities);
}
