package br.gov.sigefp.rh.domain;

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

import java.math.BigDecimal;
import java.time.LocalDate;

/**
 * Entidade que representa a tabela salarial (valores por step em um período).
 * Usa LocalDate para validade, evitando strings concatenadas.
 */
@Entity
@Table(name = "salary_grid", indexes = {
        @Index(name = "idx_salary_grid_step", columnList = "step_id"),
        @Index(name = "idx_salary_grid_validity", columnList = "valid_from,valid_to")
})
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@SuperBuilder
public class SalaryGrid extends AuditableEntity {

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "step_id", nullable = false)
    private SalaryStep step;

    @Column(nullable = false, name = "valid_from")
    private LocalDate validFrom; // Data de início da vigência

    @Column(name = "valid_to")
    private LocalDate validTo; // Data de fim da vigência (null se ainda vigente)

    @Column(nullable = false, precision = 19, scale = 2, name = "base_amount")
    private BigDecimal baseAmount; // Valor base salarial

    @Column(precision = 19, scale = 2, name = "subsidy_amount")
    private BigDecimal subsidyAmount; // Subsídio

    @Column(precision = 19, scale = 2, name = "gross_amount")
    private BigDecimal grossAmount; // Salário Bruto (Base + Subsídio)
}
