export type MeetingSummaryStatus =
  | "DRAFT"
  | "REVIEWED"
  | "SUBMITTED"
  | "COMPLETED";

// Human-readable label for each status code, shown on badges and filters.
export const meetingSummaryStatusLabels: Record<MeetingSummaryStatus, string> = {
  DRAFT: "Draft",
  REVIEWED: "Reviewed",
  SUBMITTED: "Submitted",
  COMPLETED: "Completed",
};

export type MeetingSummaryRow = {
  id: number;
  summaryTitle: string;
  meetingDate: string;
  issueCount: number;
  meetingRequest: string;
  meetingSummary: string;
  governmentAgency: string;
  governmentAgencyLogo?: string | null;
  pswg: string;
  status: MeetingSummaryStatus;
  meetingPswg: string;
};

export type MeetingSummaryFiltersValue = {
  statuses: MeetingSummaryStatus[];
  years: string[];
  issueCounts: string[];
};

export const defaultMeetingSummaryFilters: MeetingSummaryFiltersValue = {
  statuses: [],
  years: [],
  issueCounts: [],
};

export function filterMeetingSummaryRows(
  rows: MeetingSummaryRow[],
  filters: MeetingSummaryFiltersValue,
) {
  return rows.filter((row) => {
    const meetingYear = new Date(row.meetingDate).getFullYear().toString();

    const matchesStatus =
      filters.statuses.length === 0 || filters.statuses.includes(row.status);
    const matchesYear =
      filters.years.length === 0 || filters.years.includes(meetingYear);
    const matchesIssueCount =
      filters.issueCounts.length === 0 ||
      filters.issueCounts.includes(String(row.issueCount));

    return matchesStatus && matchesYear && matchesIssueCount;
  });
}
