import { bulkUpdateContactsSchema } from "../dtos/bulk-update-contacts-schema";
import { ContactsRepository } from "../repositories/contacts-repository";
import { ContactListsRepository } from "../repositories/contact-lists-repository";

interface BulkUpdateContactsUseCaseRequest {
  body: unknown;
  userId?: string;
}

interface BulkUpdateContactsUseCaseResponse {
  affected: number;
}

export class BulkUpdateContactsUseCase {
  constructor(
    private contactsRepository: ContactsRepository,
    private contactListsRepository: ContactListsRepository
  ) {}

  async execute({ body, userId }: BulkUpdateContactsUseCaseRequest): Promise<BulkUpdateContactsUseCaseResponse> {
    const data = bulkUpdateContactsSchema.parse(body);

    switch (data.action) {
      case "delete": {
        const affected = await this.contactsRepository.deleteMany(data.ids);
        return { affected };
      }
      case "addTags": {
        await this.contactsRepository.addTagsToMany(data.ids, data.payload.tags, userId);
        return { affected: data.ids.length };
      }
      case "addToList": {
        await this.contactListsRepository.addContactsToLists(data.ids, [data.payload.listId]);
        return { affected: data.ids.length };
      }
    }
  }
}
