package dev.lions.unionflow.server.entity;

import jakarta.persistence.*;
import jakarta.validation.constraints.NotNull;
import lombok.*;

import java.util.UUID;

/**
 * Lien « suivi » entre deux membres : le membre connecté (follower) suit un autre membre (suivi).
 * Utilisé pour la fonctionnalité Réseau / Suivre dans l’app mobile.
 */
@Entity
@Table(
    name = "membre_suivi",
    uniqueConstraints = @UniqueConstraint(columnNames = { "follower_utilisateur_id", "suivi_utilisateur_id" }),
    indexes = {
        @Index(name = "idx_membre_suivi_follower", columnList = "follower_utilisateur_id"),
        @Index(name = "idx_membre_suivi_suivi", columnList = "suivi_utilisateur_id")
    }
)
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@EqualsAndHashCode(callSuper = true)
public class MembreSuivi extends BaseEntity {

    /** Utilisateur qui suit (membre connecté). */
    @NotNull
    @Column(name = "follower_utilisateur_id", nullable = false)
    private UUID followerUtilisateurId;

    /** Utilisateur suivi (membre cible). */
    @NotNull
    @Column(name = "suivi_utilisateur_id", nullable = false)
    private UUID suiviUtilisateurId;
}
