import { AppError } from "@/core/errors/app-error";
import { assignContactsToListsSchema } from "../dtos/assign-contacts-to-lists-schema";
import { ContactListsRepository } from "../repositories/contact-lists-repository";

interface AssignContactsToListsUseCaseRequest {
  userId: string;
  body: unknown;
}

export class AssignContactsToListsUseCase {
  constructor(private contactListsRepository: ContactListsRepository) {}

  async execute({ userId, body }: AssignContactsToListsUseCaseRequest): Promise<{ success: boolean }> {
    const data = assignContactsToListsSchema.parse(body);

    for (const listId of data.listIds) {
      const list = await this.contactListsRepository.findById(listId);
      if (list?.userId !== userId) {
        throw AppError.notFound("Lista não encontrada");
      }
    }

    await this.contactListsRepository.addContactsToLists(data.contactIds, data.listIds);
    return { success: true };
  }
}
