import { AppError } from "@/core/errors/app-error";
import { DomainsRepository } from "../repositories/domains-repository";
import { SesIdentityProvider } from "../providers/ses-identity-provider";

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

export class DeleteDomainUseCase {
  constructor(
    private domainsRepository: DomainsRepository,
    private sesIdentityProvider: SesIdentityProvider
  ) {}

  async execute({ id, userId }: DeleteDomainUseCaseRequest): Promise<{ success: boolean }> {
    const domain = await this.domainsRepository.findById(id);

    if (domain?.userId !== userId) {
      throw AppError.notFound("Domínio não encontrado");
    }

    await this.sesIdentityProvider.deleteIdentity(domain.domain);
    await this.domainsRepository.delete(id);
    return { success: true };
  }
}
