package com.arena.combat.entity;

import jakarta.persistence.*;
import lombok.*;
import org.hibernate.annotations.CreationTimestamp;

import java.time.LocalDateTime;

@Entity
@Table(name = "historial_turnos", indexes = {
    @Index(name = "idx_turnos_partida", columnList = "partida_id"),
    @Index(name = "idx_turnos_partida_num", columnList = "partida_id, numero_turno"),
    @Index(name = "idx_turnos_usuario", columnList = "usuario_id")
})
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class TurnoHistorial {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne(fetch = FetchType.LAZY, optional = false)
    @JoinColumn(name = "partida_id", nullable = false)
    private PartidaCombate partida;

    @ManyToOne(fetch = FetchType.LAZY, optional = false)
    @JoinColumn(name = "usuario_id", nullable = false)
    private Usuario usuario;

    @Column(name = "numero_turno", nullable = false)
    private Integer numeroTurno;

    @Column(name = "accion_jugador", nullable = false, length = 50)
    private String accionJugador;

    @Column(name = "payload_frontend", nullable = false, columnDefinition = "TEXT")
    private String payloadFrontend;

    @Column(name = "calculo_jugador", nullable = false, columnDefinition = "TEXT")
    private String calculoJugador;

    @Column(name = "payload_ia", nullable = false, columnDefinition = "TEXT")
    private String payloadIa;

    @Column(name = "estado_combate_resultante", nullable = false, columnDefinition = "TEXT")
    private String estadoCombateResultante;

    @CreationTimestamp
    @Column(name = "created_at", nullable = false, updatable = false)
    private LocalDateTime createdAt;
}
