import { COOKIE_NAME } from "@shared/const";
import { getSessionCookieOptions } from "./_core/cookies";
import { systemRouter } from "./_core/systemRouter";
import { publicProcedure, protectedProcedure, router } from "./_core/trpc";
import { sendApplicationEmail } from "./email";

// Jobs data - hardcoded para não precisar de banco de dados
const JOBS = [
  {
    id: 1,
    title: "Analista de Dados",
    salary: "R$ 12.000/mês",
    description: "Estamos buscando analistas de dados para atuar de forma remota, analisando grandes volumes de dados e gerando insights valiosos para a empresa.",
    benefits: JSON.stringify([
      "Trabalhe de casa",
      "Sem horário fixo",
      "Salário R$ 12.000",
      "Treinamento incluso",
    ]),
  },
  {
    id: 2,
    title: "Redator(a) SEO",
    salary: "R$ 10.000/mês",
    description: "Procuramos redatores SEO para criar conteúdo otimizado e de qualidade, quando conteúdo otimizado para mecanismos de busca.",
    benefits: JSON.stringify([
      "Trabalhe de casa",
      "Sem horário fixo",
      "Salário R$ 10.000",
      "Treinamento incluso",
    ]),
  },
  {
    id: 3,
    title: "Gestor(a) de Tráfego Pago",
    salary: "R$ 9.000/mês",
    description: "Estamos buscando gestores(as) de tráfego pago para atuar de forma remota, gerenciando campanhas de publicidade digital.",
    benefits: JSON.stringify([
      "Trabalhe de casa",
      "Sem horário fixo",
      "Salário R$ 9.000",
      "Treinamento incluso",
    ]),
  },
  {
    id: 4,
    title: "Digitador(a)",
    salary: "R$ 8.000/mês",
    description: "Procuramos digitadores(as) para trabalhar de forma remota, digitando documentos e dados em sistemas.",
    benefits: JSON.stringify([
      "Trabalhe de casa",
      "Sem horário fixo",
      "Salário R$ 8.000",
      "Treinamento incluso",
    ]),
  },
];

export const appRouter = router({
  system: systemRouter,
  auth: router({
    me: publicProcedure.query((opts) => opts.ctx.user),
    logout: publicProcedure.mutation(({ ctx }) => {
      const cookieOptions = getSessionCookieOptions(ctx.req);
      ctx.res.clearCookie(COOKIE_NAME, { ...cookieOptions, maxAge: -1 });
      return {
        success: true,
      } as const;
    }),
  }),

  jobs: router({
    list: publicProcedure.query(async () => {
      return JOBS;
    }),
  }),

  applications: router({
    create: publicProcedure
      .input((input: any) => ({
        jobId: input.jobId,
        fullName: input.fullName,
        phone: input.phone,
        rgFrontUrl: input.rgFrontUrl,
        rgBackUrl: input.rgBackUrl,
      }))
      .mutation(async ({ input }) => {
        // Get job title for email
        const job = JOBS.find((j) => j.id === input.jobId);

        // Send email with attachments
        try {
          await sendApplicationEmail(
            input.fullName,
            input.phone,
            job?.title || "Vaga Desconhecida",
            input.rgFrontUrl,
            input.rgBackUrl
          );
          console.log(`✅ Email enviado com sucesso para ${input.fullName}`);
        } catch (error) {
          console.error("❌ Erro ao enviar email:", error);
          throw new Error("Erro ao enviar candidatura. Tente novamente.");
        }

        return {
          success: true,
          message: "Candidatura recebida! Você receberá um email de confirmação em breve.",
        };
      }),

    list: protectedProcedure.query(async ({ ctx }) => {
      if (ctx.user?.role !== "admin") {
        throw new Error("Unauthorized");
      }
      return [];
    }),
  }),
});

export type AppRouter = typeof appRouter;
