package br.gov.sigefp.rh.domain;

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

import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;

/**
 * Entidade que representa um período de folha de pagamento.
 * Usa LocalDate para datas, evitando strings concatenadas.
 */
@Entity
@Table(name = "payroll_period", indexes = {
        @Index(name = "idx_payroll_period_fiscal", columnList = "fiscal_year,month"),
        @Index(name = "idx_payroll_period_status", columnList = "status")
})
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@lombok.experimental.SuperBuilder
public class PayrollPeriod extends AuditableEntity {

    @Column(nullable = false, name = "fiscal_year")
    private Integer fiscalYear; // Ano fiscal

    @Column(nullable = false)
    private Integer month; // Mês (1-12)

    @Column(nullable = false, length = 20)
    @Builder.Default
    private String status = "OPEN"; // OPEN, CLOSED, PROCESSING

    @Column(nullable = false, name = "start_date")
    private LocalDate startDate; // Data de início do período

    @Column(nullable = false, name = "end_date")
    private LocalDate endDate; // Data de fim do período

    @OneToMany(mappedBy = "period", cascade = CascadeType.ALL, orphanRemoval = true)
    @Builder.Default
    private List<PayrollRun> payrollRuns = new ArrayList<>();
}
