package com.hpay.hpay_mobile_api.entities;
import jakarta.persistence.*;
import lombok.*;
import java.time.LocalDateTime;

@Entity
@Table(name = "sochitel")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Sochitel {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "idsochitel")
    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 = "montant")
    private Float montant;

    @Column(name = "frais")
    private Float frais;

    @Column(name = "total")
    private Float total;

    @Column(name = "montant_debite")
    private Float montantDebite;

    @Column(name = "devise_debite", length = 3)
    private String deviseDebite;

    @Column(name = "gain_client")
    private Float gainClient;

    @Column(name = "gain_parrain")
    private Float gainParrain;

    @Column(name = "gain_franchise")
    private Float gainFranchise;

    @Column(name = "gain_hpay")
    private Float gainHpay;

    @Column(name = "operator_id")
    private Integer operatorId;

    @Column(name = "operator_name", length = 45)
    private String operatorName;

    @Column(name = "operator_amount")
    private Float operatorAmount;

    @Column(name = "operator_reference", length = 200)
    private String operatorReference;

    @Column(name = "operator_currency", length = 3)
    private String operatorCurrency;

    @Column(name = "country_id")
    private Integer countryId;

    @Column(name = "country_name", length = 45)
    private String countryName;

    @Column(name = "user_amount")
    private Float userAmount;

    @Column(name = "user_currency", length = 3)
    private String userCurrency;

    @Column(name = "user_reference", length = 45)
    private String userReference;

    @Column(name = "product_id")
    private Integer productId;

    @Column(name = "product_type", length = 45)
    private String productType;

    @Column(name = "product_type_name", length = 45)
    private String productTypeName;

    @Column(name = "reference", length = 45)
    private String reference;

    @Column(name = "timestamp", length = 20)
    private String timestamp;

    @Column(name = "voucher_pin_number", length = 45)
    private String voucherPinNumber;

    @Column(name = "voucher_pin_serial", length = 45)
    private String voucherPinSerial;

    @Lob
    @Column(name = "voucher_pin_instruction")
    private String voucherPinInstruction;

    @Column(name = "commande", length = 45)
    private String commande;

    @Column(name = "balance_initial")
    private Float balanceInitial;

    @Column(name = "transaction_amount")
    private Float transactionAmount;

    @Column(name = "transaction_commission")
    private Float transactionCommission;

    @Column(name = "transaction_commission_percentage")
    private Float transactionCommissionPercentage;

    @Column(name = "balance_final")
    private Float balanceFinal;

    @Column(name = "balance_currency")
    private Float balanceCurrency;

    @Column(name = "date_eff")
    private LocalDateTime dateEff;

    @Column(name = "statut", length = 1, nullable = false)
    private String statut = "1"; // 0=attente,1=Eff,2=annuler

    @Column(name = "beneficiaire", length = 45)
    private String beneficiaire;

    @Column(name = "idagence")
    private Integer idAgence;
}
