import { ContactExportJob } from "@prisma/client";
import {
  ContactExportJobSummary,
  ContactExportJobsRepository,
  CreateExportJobData,
} from "./contact-export-jobs-repository";

export class InMemoryContactExportJobsRepository implements ContactExportJobsRepository {
  public items: ContactExportJob[] = [];

  async create(data: CreateExportJobData): Promise<ContactExportJob> {
    const job: ContactExportJob = {
      id: `export-job-${this.items.length + 1}`,
      filters: data.filters as never,
      columns: data.columns,
      totalRows: data.totalRows,
      csvContent: data.csvContent,
      createdById: data.createdById,
      createdAt: new Date(),
    };
    this.items.push(job);
    return job;
  }

  async findById(id: string): Promise<ContactExportJob | null> {
    return this.items.find((item) => item.id === id) ?? null;
  }

  async findByCreatedById(createdById: string): Promise<ContactExportJobSummary[]> {
    return this.items
      .filter((item) => item.createdById === createdById)
      .sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime())
      .map((item) => ({
        id: item.id,
        filters: item.filters,
        columns: item.columns,
        totalRows: item.totalRows,
        createdById: item.createdById,
        createdAt: item.createdAt,
      }));
  }
}
