"use server";

import { auth } from "@/config/auth";
import { PrismaCampaignsRepository } from "@/modules/campaigns/repositories/prisma-campaigns-repository";
import { PrismaContactListsRepository } from "@/modules/contacts/repositories/prisma-contact-lists-repository";
import { PrismaContactsRepository } from "@/modules/contacts/repositories/prisma-contacts-repository";
import { PrismaTagsRepository } from "@/modules/contacts/repositories/prisma-tags-repository";
import { PrismaDomainsRepository } from "@/modules/domains/repositories/prisma-domains-repository";
import { PrismaSendersRepository } from "@/modules/senders/repositories/prisma-senders-repository";
import { GlobalSearchUseCase } from "../use-cases/global-search-use-case";

export async function globalSearchAction(query: string) {
  const session = await auth();
  if (!session?.user?.id) {
    throw new Error("Não autorizado");
  }

  const useCase = new GlobalSearchUseCase(
    new PrismaContactsRepository(),
    new PrismaCampaignsRepository(),
    new PrismaContactListsRepository(),
    new PrismaTagsRepository(),
    new PrismaDomainsRepository(),
    new PrismaSendersRepository()
  );

  return useCase.execute({ query, userId: session.user.id });
}
