import { AppError } from "@/core/errors/app-error";
import { ContactListsRepository } from "../repositories/contact-lists-repository";
import { ContactsRepository } from "../repositories/contacts-repository";

interface DeleteContactListUseCaseRequest {
  id: string;
  userId: string;
}

interface DeleteContactListUseCaseResponse {
  success: boolean;
  deletedContactsCount: number;
}

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

  async execute({ id, userId }: DeleteContactListUseCaseRequest): Promise<DeleteContactListUseCaseResponse> {
    const list = await this.contactListsRepository.findById(id);

    if (list?.userId !== userId) {
      throw AppError.notFound("Lista não encontrada");
    }

    // Deleta contatos que pertencem exclusivamente a esta lista
    const deletedContactsCount = await this.contactsRepository.deleteContactsByListId(id);

    // Deleta a lista (e memberships em cascata via Prisma)
    await this.contactListsRepository.delete(id);

    return { success: true, deletedContactsCount };
  }
}
