package com.hpay.hpay_mobile_api.entities;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonBackReference;
import jakarta.persistence.*;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Setter;

@Entity
@Table(name = "compte")
@RequiredArgsConstructor
@Getter
@Setter
public class Compte {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "idcompte")
    private int idCompte;

    @ManyToOne
    @JoinColumn(name = "idclients")
    @JsonBackReference
    private Client client;

    @ManyToOne
    @JoinColumn(name = "idtype_compte")
    @JsonManagedReference
    private TypeCompte typeCompte;

    @Column(name = "num_compte")
    private String numCompte;

    @Column(name = "solde")
    private BigDecimal solde;

    @Column(name = "frais_creation_cpt")
    private BigDecimal fraisCreationCpt;


    @ManyToOne
    @JoinColumn(name = "idpays", nullable = false)
    private Pays pays;

    @Column(name = "compte_suspendu")
    private String compteSuspendu;

    @Column(name = "rib")
    private String rib;

    @Column(name = "iban")
    private String iban;

    @Column(name = "bic_swift")
    private String bicSwift;

    @Column(name = "idcompte_entreprise")
    private int idCompteEntreprise;

    @Column(name = "date_creation_cpt")
    private Date dateCreationCpt;

    @Column(name = "devise")
    private String devise;

    @Column(name = "cloture")
    private String cloture;

    // Relation OneToOne
    @OneToOne(mappedBy = "compte", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JsonManagedReference
    private CarteClientQr carteClientQr;


}