package br.gov.sigefp.rh.domain;

import br.gov.sigefp.common.domain.AuditableEntity;
import jakarta.persistence.*;
import lombok.*;
import lombok.experimental.SuperBuilder;
import java.time.LocalDate;

/**
 * Representa a avaliação de desempenho anual de um agente.
 * Essencial para validar progressões e promoções conforme o Decreto nº 12-A/94.
 */
@Entity
@Table(name = "performance_evaluations", indexes = {
        @Index(name = "idx_evaluation_agent", columnList = "agent_id"),
        @Index(name = "idx_evaluation_year", columnList = "reference_year"),
        @Index(name = "idx_evaluation_status", columnList = "status")
})
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@SuperBuilder
public class PerformanceEvaluation extends AuditableEntity {

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "agent_id", nullable = false)
    private Agent agent;

    @Column(nullable = false, name = "reference_year")
    private Integer referenceYear; // Ano a que se refere a avaliação

    @Column(nullable = false)
    private Integer score; // Pontuação 1-10 ou 5-20 (Decreto 12-A/94 sugere quantificação)

    @Column(length = 20, nullable = true)
    @Builder.Default
    private String status = "DRAFT"; // DRAFT, FINAL, CANCELLED

    @Column(nullable = false, length = 50)
    private String mention; // MAU, MEDIOCRE, REGULAR, BOM, MUITO_BOM

    @Column(columnDefinition = "TEXT")
    private String observations;

    @Column(name = "evaluation_date")
    private LocalDate evaluationDate;

    /**
     * Define a menção qualitativa com base na pontuação quantitativa conforme o
     * Estatuto (Escala 0-20).
     */
    public void updateMentionFromScore() {
        if (score == null)
            return;
        if (score >= 18)
            this.mention = "MUITO_BOM";
        else if (score >= 14)
            this.mention = "BOM";
        else if (score >= 10)
            this.mention = "REGULAR";
        else if (score >= 6)
            this.mention = "MEDIOCRE";
        else
            this.mention = "MAU";
    }
}
