package com.hpay.hpay_mobile_api.entities;


import jakarta.persistence.*;
import lombok.*;
import java.math.BigDecimal;
import java.time.LocalDateTime;

@Entity
@Table(name = "depot_retrait")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class DepotRetrait {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "iddepot_retrait")
    private Long id;

    @Column(name = "idclients", nullable = false)
    private Integer idClients;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "idclients", referencedColumnName = "idclients", insertable = false, updatable = false)
    private Client client;

    @Column(name = "idcompte", nullable = false)
    private Integer idCompte;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "idcompte", referencedColumnName = "idcompte", insertable = false, updatable = false)
    private Compte compte;



    @Column(name = "idagence", nullable = false)
    private Integer idAgence;

    @Column(name = "idcaisse", nullable = false)
    private Integer idCaisse;

    @Column(name = "idemploye", nullable = false)
    private Integer idEmploye;

    @Column(name = "type_action", nullable = false, length = 10)
    private String typeAction; // "DEPOT" ou "RETRAIT"

    @Column(name = "code_dr_debit", nullable = false, length = 10)
    private String codeDrDebit;

    @Column(name = "code_dr_credit", nullable = false, length = 10)
    private String codeDrCredit;

    @Column(nullable = false, precision = 18, scale = 2)
    private BigDecimal montant;

    @Column(nullable = false, precision = 18, scale = 2)
    private BigDecimal frais;

    @Column(nullable = false, precision = 18, scale = 2)
    private BigDecimal total;

    @Column(name = "date_transaction", nullable = false)
    private LocalDateTime dateTransaction;

    @Column(name = "idpays", nullable = false)
    private Integer idPays;

    @Lob
    @Column(name = "details")
    private String details;

    @Column(name = "avec_cheque", length = 45)
    private String avecCheque;

    @Column(name = "num_transaction", length = 15)
    private String numTransaction;

    @Column(name = "idcompte_entreprise", nullable = false)
    private Integer idCompteEntreprise = 0;

    @Column(nullable = false, length = 1)
    private String annuler = "0"; // "1"=Oui, "0"=Non

    @Lob
    @Column(name = "annuler_raison")
    private String annulerRaison;

    @Column(name = "annuler_date")
    private LocalDateTime annulerDate;

    @Column(name = "annuler_par", length = 45)
    private String annulerPar;

    @Column(nullable = false, length = 1)
    private String decouvert = "0";

    @Lob
    @Column(name = "motif")
    private String motif;

    @Column(name = "devise_source", length = 10)
    private String deviseSource;

    @Column(name = "devise_cible", length = 10)
    private String deviseCible;

    @Column(name = "taux_conversion", precision = 18, scale = 6)
    private BigDecimal tauxConversion;

    @Column(name = "montant_converti", precision = 18, scale = 2)
    private BigDecimal montantConverti;

}