import { Domain, Sender } from "@prisma/client";
import { CreateSenderDTO } from "../dtos/create-sender-dto";
import { UpdateSenderDTO } from "../dtos/update-sender-dto";

export type PublicSender = Pick<
  Sender,
  "id" | "name" | "fromEmail" | "provider" | "smtpHost" | "smtpPort" | "smtpUser" | "domainId"
> & { domain: Pick<Domain, "id" | "domain" | "verificationStatus"> | null };

export interface SendersRepository {
  findById(id: string): Promise<Sender | null>;
  findByIdWithDomain(id: string): Promise<(Sender & { domain: Domain | null }) | null>;
  findByUserId(userId: string): Promise<PublicSender[]>;
  searchByUserId(userId: string, query: string, limit: number): Promise<PublicSender[]>;
  findFirstByUserId(userId: string): Promise<Sender | null>;
  create(data: CreateSenderDTO & { encryptedPass?: string }): Promise<PublicSender>;
  update(
    id: string,
    data: Omit<UpdateSenderDTO, "smtpPass"> & { encryptedPass?: string }
  ): Promise<PublicSender>;
  delete(id: string): Promise<void>;
}
