package br.gov.sigefp.rh.domain;

import br.gov.sigefp.common.domain.AuditableEntity;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import jakarta.persistence.*;
import lombok.*;
import lombok.experimental.SuperBuilder;

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

/**
 * Representa um escalão de imposto progressivo (ex: IRPS).
 */
@Entity
@Table(name = "tax_bracket")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@SuperBuilder
@JsonIgnoreProperties({ "hibernateLazyInitializer", "handler" })
public class TaxBracket extends AuditableEntity {

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "deduction_type_id", nullable = false)
    private DeductionType deductionType;

    @Column(nullable = false, precision = 19, scale = 2)
    private BigDecimal lowerLimit; // Limite inferior do escalão

    @Column(precision = 19, scale = 2)
    private BigDecimal upperLimit; // Limite superior (null para o último escalão)

    @Column(precision = 5, scale = 4)
    private BigDecimal ratePercentage; // Taxa (ex: 0.15 para 15%) - Pode ser null se for valor fixo

    @Column(precision = 19, scale = 2)
    private BigDecimal excessDeduction; // Parcela a abater - Pode ser null se for valor fixo

    @Column(name = "fixed_amount", precision = 19, scale = 2)
    private BigDecimal fixedAmount; // Valor fixo (para impostos não progressivos como Imposto Democracia)

    @Column(nullable = false, name = "valid_from")
    private LocalDate validFrom;

    @Column(name = "valid_to")
    private LocalDate validTo;
}
