package br.gov.sigefp.rh.api.dto;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDate;
import java.util.UUID;

/**
 * DTO para transferência de dados de agente.
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AgentDTO {

    private UUID id;

    @NotBlank(message = "Matrícula é obrigatória")
    @Size(min = 1, max = 20, message = "Matrícula deve ter entre 1 e 20 caracteres")
    private String matricula;

    @NotBlank(message = "NIF é obrigatório")
    @Size(min = 9, max = 20, message = "NIF deve ter entre 9 e 20 caracteres")
    private String nif;

    @NotBlank(message = "Número do BI é obrigatório")
    @Size(min = 1, max = 20, message = "Número do BI deve ter entre 1 e 20 caracteres")
    private String biNumber;

    @NotBlank(message = "Nome completo é obrigatório")
    @Size(max = 200, message = "Nome completo deve ter no máximo 200 caracteres")
    private String fullName;

    @NotNull(message = "Data de nascimento é obrigatória")
    private LocalDate birthDate;

    @NotNull(message = "Data de admissão é obrigatória")
    private LocalDate hireDate;

    private LocalDate posseDate;

    private LocalDate terminationDate;

    private String appointmentType;

    private String functionalSituation;

    private Integer eligibleDependentsCount;

    @Size(max = 20, message = "Status deve ter no máximo 20 caracteres")
    private String status;

    private String literaryQualification;

    // DEPRECATED: Estes campos agora estão em AgentContract
    @Deprecated
    private UUID salaryCategory;
    @Deprecated
    private UUID salaryGrade;
    @Deprecated
    private UUID salaryStep;
    @Deprecated
    private UUID orgUnit;
    @Deprecated
    private UUID position;

    @Size(max = 50, message = "Nacionalidade deve ter no máximo 50 caracteres")
    private String nationality;

    @Size(max = 20, message = "Telefone deve ter no máximo 20 caracteres")
    private String phone;

    @Size(max = 100, message = "Email deve ter no máximo 100 caracteres")
    private String email;

    @Size(max = 500, message = "Endereço deve ter no máximo 500 caracteres")
    private String address;

    @Size(max = 500, message = "Motivo da alteração de status deve ter no máximo 500 caracteres")
    private String statusChangeReason;

    // Campos adicionais para Vida Laboral durante a Edição
    private LocalDate eventEffectiveDate;
    private LocalDate eventPublicationDate;
    private String eventDocumentRef;

    // Novos campos para incluir dados relacionados
    private AgentContractDTO activeContract;
    private AgentBankAccountDTO primaryBankAccount;
}
