package dev.lions.unionflow.server.api.dto.comptabilite;

import dev.lions.unionflow.server.api.dto.base.BaseDTO;
import jakarta.validation.constraints.*;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;
import java.util.UUID;
import lombok.Getter;
import lombok.Setter;

/**
 * DTO pour la gestion des écritures comptables
 *
 * @author UnionFlow Team
 * @version 3.0
 * @since 2025-01-29
 */
@Getter
@Setter
public class EcritureComptableDTO extends BaseDTO {

  private static final long serialVersionUID = 1L;

  /** Numéro de pièce */
  @NotBlank(message = "Le numéro de pièce est obligatoire")
  private String numeroPiece;

  /** Date de l'écriture */
  @NotNull(message = "La date de l'écriture est obligatoire")
  private LocalDate dateEcriture;

  /** Libellé de l'écriture */
  @NotBlank(message = "Le libellé est obligatoire")
  private String libelle;

  /** Référence externe */
  private String reference;

  /** Lettrage */
  private String lettrage;

  /** Pointage */
  private Boolean pointe;

  /** Montant total débit */
  @DecimalMin(value = "0.0")
  @Digits(integer = 12, fraction = 2)
  private BigDecimal montantDebit;

  /** Montant total crédit */
  @DecimalMin(value = "0.0")
  @Digits(integer = 12, fraction = 2)
  private BigDecimal montantCredit;

  /** Commentaires */
  private String commentaire;

  /** ID du journal */
  @NotNull(message = "Le journal est obligatoire")
  private UUID journalId;

  /** ID de l'organisation */
  private UUID organisationId;

  /** ID du paiement */
  private UUID paiementId;

  /** Lignes d'écriture */
  private List<LigneEcritureDTO> lignes;
}

