import { passwordSchema, userSchema } from "@/lib/validation/zod/user";
import { createTRPCRouter, publicProcedure } from "../trpc";
import { z } from "zod";
import { eq } from "drizzle-orm";
import { users } from "@/server/db/schema";
import argon from "argon2";

export const authRouter = createTRPCRouter({
  register: publicProcedure
    .input(
      z.object({
        user: userSchema,
        password: passwordSchema,
      }),
    )
    .mutation(async ({ ctx, input }) => {
      const {
        password,
        user: { email, name },
      } = input;
      // Check if user already exists
      try {
        const existingUser = await ctx.db.query.users.findFirst({
          where: eq(users.email, email),
        });

        if (existingUser) {
          return { success: false, message: "User already exists" };
        }

        // Hash the password (12 is a good cost factor)
        const hashedPassword = await argon.hash(password);

        // Create user in database
        const [user] = await ctx.db
          .insert(users)
          .values({
            name,
            email,
            password: hashedPassword,
          })
          .returning({ id: users.id });
        console.log(user);

        if (user) {
          return { success: true, message: "User created successfully" };
        }
        return { success: false, message: "Error creating user" };
      } catch (e) {
        console.error(e);
        return { success: false, message: "Error creating user" };
      }
    }),
});
