package dev.lions.unionflow.client.dto;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * DTO client pour le solde Wave Money
 *
 * @author UnionFlow Team
 * @version 1.0
 * @since 2025-01-17
 */
public class WaveBalanceDTO implements Serializable {

  private static final long serialVersionUID = 1L;

  private BigDecimal soldeDisponible;
  private BigDecimal soldeEnAttente;
  private BigDecimal soldeTotal;
  private String devise;
  private String numeroWallet;
  private String nomBusiness;
  private LocalDateTime dateDerniereMiseAJour;
  private LocalDateTime dateDerniereSynchronisation;
  private String statutWallet;
  private BigDecimal limiteQuotidienne;
  private BigDecimal montantUtiliseAujourdhui;
  private BigDecimal limiteMensuelle;
  private BigDecimal montantUtiliseCeMois;
  private Integer nombreTransactionsAujourdhui;
  private Integer nombreTransactionsCeMois;

  // Getters et Setters
  public BigDecimal getSoldeDisponible() { return soldeDisponible; }
  public void setSoldeDisponible(BigDecimal soldeDisponible) { this.soldeDisponible = soldeDisponible; }

  public BigDecimal getSoldeEnAttente() { return soldeEnAttente; }
  public void setSoldeEnAttente(BigDecimal soldeEnAttente) { this.soldeEnAttente = soldeEnAttente; }

  public BigDecimal getSoldeTotal() { return soldeTotal; }
  public void setSoldeTotal(BigDecimal soldeTotal) { this.soldeTotal = soldeTotal; }

  public String getDevise() { return devise; }
  public void setDevise(String devise) { this.devise = devise; }

  public String getNumeroWallet() { return numeroWallet; }
  public void setNumeroWallet(String numeroWallet) { this.numeroWallet = numeroWallet; }

  public String getNomBusiness() { return nomBusiness; }
  public void setNomBusiness(String nomBusiness) { this.nomBusiness = nomBusiness; }

  public LocalDateTime getDateDerniereMiseAJour() { return dateDerniereMiseAJour; }
  public void setDateDerniereMiseAJour(LocalDateTime dateDerniereMiseAJour) { this.dateDerniereMiseAJour = dateDerniereMiseAJour; }

  public LocalDateTime getDateDerniereSynchronisation() { return dateDerniereSynchronisation; }
  public void setDateDerniereSynchronisation(LocalDateTime dateDerniereSynchronisation) { this.dateDerniereSynchronisation = dateDerniereSynchronisation; }

  public String getStatutWallet() { return statutWallet; }
  public void setStatutWallet(String statutWallet) { this.statutWallet = statutWallet; }

  public BigDecimal getLimiteQuotidienne() { return limiteQuotidienne; }
  public void setLimiteQuotidienne(BigDecimal limiteQuotidienne) { this.limiteQuotidienne = limiteQuotidienne; }

  public BigDecimal getMontantUtiliseAujourdhui() { return montantUtiliseAujourdhui; }
  public void setMontantUtiliseAujourdhui(BigDecimal montantUtiliseAujourdhui) { this.montantUtiliseAujourdhui = montantUtiliseAujourdhui; }

  public BigDecimal getLimiteMensuelle() { return limiteMensuelle; }
  public void setLimiteMensuelle(BigDecimal limiteMensuelle) { this.limiteMensuelle = limiteMensuelle; }

  public BigDecimal getMontantUtiliseCeMois() { return montantUtiliseCeMois; }
  public void setMontantUtiliseCeMois(BigDecimal montantUtiliseCeMois) { this.montantUtiliseCeMois = montantUtiliseCeMois; }

  public Integer getNombreTransactionsAujourdhui() { return nombreTransactionsAujourdhui; }
  public void setNombreTransactionsAujourdhui(Integer nombreTransactionsAujourdhui) { this.nombreTransactionsAujourdhui = nombreTransactionsAujourdhui; }

  public Integer getNombreTransactionsCeMois() { return nombreTransactionsCeMois; }
  public void setNombreTransactionsCeMois(Integer nombreTransactionsCeMois) { this.nombreTransactionsCeMois = nombreTransactionsCeMois; }

  /**
   * Formate le solde disponible pour l'affichage
   */
  public String getSoldeDisponibleFormate() {
    if (soldeDisponible == null) return "0 FCFA";
    return String.format("%.0f FCFA", soldeDisponible.doubleValue());
  }

  /**
   * Formate le solde total pour l'affichage
   */
  public String getSoldeTotalFormate() {
    if (soldeTotal == null) return "0 FCFA";
    return String.format("%.0f FCFA", soldeTotal.doubleValue());
  }

  /**
   * Vérifie si le wallet est actif
   */
  public boolean isWalletActif() {
    return "ACTIVE".equals(statutWallet);
  }
}
