package fr.luc.gamingcore.model;

import java.time.Instant;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.UUID;

/**
 * Entité représentant une entrée d'historique (log) au sein d'une guilde.
 */
public class GuildLog {

    private static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern("dd/MM HH:mm").withZone(ZoneId.systemDefault());

    private final long id;
    private final UUID guildId;
    private final UUID actorUuid;
    private final String actorName;
    private final String actionType;
    private final String details;
    private final long timestamp;

    /**
     * Constructeur complet d'une entrée de log de guilde.
     *
     * @param id         Identifiant unique en BDD.
     * @param guildId    UUID de la guilde associée.
     * @param actorUuid  UUID du joueur ayant déclenché l'action (peut être null).
     * @param actorName  Nom du joueur ou "Système".
     * @param actionType Type d'action (ex: JOIN, LEAVE, CLAIM, BANK_DEPOSIT, etc.).
     * @param details    Description textuelle de l'événement.
     * @param timestamp  Timestamp Unix en millisecondes.
     */
    public GuildLog(long id, UUID guildId, UUID actorUuid, String actorName, String actionType, String details, long timestamp) {
        this.id = id;
        this.guildId = guildId;
        this.actorUuid = actorUuid;
        this.actorName = actorName != null ? actorName : "Système";
        this.actionType = actionType != null ? actionType : "INFO";
        this.details = details != null ? details : "";
        this.timestamp = timestamp;
    }

    public long getId() {
        return id;
    }

    public UUID getGuildId() {
        return guildId;
    }

    public UUID getActorUuid() {
        return actorUuid;
    }

    public String getActorName() {
        return actorName;
    }

    public String getActionType() {
        return actionType;
    }

    public String getDetails() {
        return details;
    }

    public long getTimestamp() {
        return timestamp;
    }

    /**
     * Retourne la date et l'heure formatée de l'entrée de log.
     *
     * @return Ex: "20/08 20:45"
     */
    public String getFormattedDate() {
        return TIME_FORMATTER.format(Instant.ofEpochMilli(timestamp));
    }
}
