package de.cannamanage.service.model.report;

import de.cannamanage.domain.enums.MemberStatus;

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

/**
 * Member list report data model.
 * Lists all members of a club with distribution statistics.
 */
public class MemberListReport {

    private Instant generatedAt;
    private List<MemberEntry> members;

    public Instant getGeneratedAt() { return generatedAt; }
    public void setGeneratedAt(Instant generatedAt) { this.generatedAt = generatedAt; }

    public List<MemberEntry> getMembers() { return members; }
    public void setMembers(List<MemberEntry> members) { this.members = members; }

    /**
     * A single member entry within the report.
     */
    public static class MemberEntry {
        private UUID id;
        private String firstName;
        private String lastName;
        private String membershipNumber;
        private MemberStatus status;
        private LocalDate joinDate;
        private int totalDistributions;
        private Instant lastDistributionDate;

        public UUID getId() { return id; }
        public void setId(UUID id) { this.id = id; }

        public String getFirstName() { return firstName; }
        public void setFirstName(String firstName) { this.firstName = firstName; }

        public String getLastName() { return lastName; }
        public void setLastName(String lastName) { this.lastName = lastName; }

        public String getMembershipNumber() { return membershipNumber; }
        public void setMembershipNumber(String membershipNumber) { this.membershipNumber = membershipNumber; }

        public MemberStatus getStatus() { return status; }
        public void setStatus(MemberStatus status) { this.status = status; }

        public LocalDate getJoinDate() { return joinDate; }
        public void setJoinDate(LocalDate joinDate) { this.joinDate = joinDate; }

        public int getTotalDistributions() { return totalDistributions; }
        public void setTotalDistributions(int totalDistributions) { this.totalDistributions = totalDistributions; }

        public Instant getLastDistributionDate() { return lastDistributionDate; }
        public void setLastDistributionDate(Instant lastDistributionDate) { this.lastDistributionDate = lastDistributionDate; }
    }
}
