package org.initialde.yakasave.Domain.Entities;

import jakarta.persistence.*;
import lombok.*;
import org.hibernate.annotations.NaturalId;
import org.initialde.yakasave.Domain.Enums.TypeSavingsFund;

import java.time.LocalDate;
import java.util.List;
import java.util.UUID;

@Entity
@Table(name = "savings_fund")
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Getter
@Setter
public class SavingsFundSnapshot {
    @Id
    private UUID id;
    private String goalTitle;
    private String goalDescription;
    private boolean isActive;

    @Enumerated(EnumType.STRING)
    private TypeSavingsFund type;

    @ManyToOne(fetch = FetchType.LAZY)
    private User owner;

    private double goalAmount;
    private double balance;
    private LocalDate launchDate;
    private LocalDate deadline;

    @NaturalId
    private String reference;
    private boolean hasRequiredApproval;
    private int maxAllowedMembers;

    @ManyToMany(fetch = FetchType.LAZY)
    private List<User> contributors;

    @OneToMany(mappedBy = "savingsFund", fetch = FetchType.LAZY, orphanRemoval = true,  cascade = CascadeType.ALL)
    private List<Contribution> contributions;

    @OneToMany(mappedBy = "savingsFund", fetch = FetchType.LAZY, orphanRemoval = true,  cascade = CascadeType.ALL)
    private List<WithdrawalApproval> receiptsApprovals;
}
