import { z } from "zod";

import { TRPCError } from "@trpc/server";
import { createTRPCRouter, protectedProcedure } from "~/server/api/trpc";

export const registerRouter = createTRPCRouter({
  openRegister: protectedProcedure
    .input(
      z.object({
        description: z.string().nullish(),
      })
    )
    .mutation(async ({ ctx, input }) => {
      const openedRegister = await ctx.prisma.register.findFirst({
        where: {
          closed_at: null,
        },
      });

      if (openedRegister === null) {
        const userConnect = { connect: { id: ctx.session.user.id } };
        const createdRegister = await ctx.prisma.register.create({
          data: {
            description: input.description,
            user: userConnect,
          },
        });
        return createdRegister;
      } else {
        throw new TRPCError({
          code: "BAD_REQUEST",
          message: "Ja existe um caixa aberto!",
        });
      }
    }),
  closeRegister: protectedProcedure
    .input(
      z.object({
        register_id: z.number(),
      })
    )
    .mutation(async ({ ctx, input }) => {
      const updatedRegister = await ctx.prisma.register.update({
        where: {
          id: input.register_id,
        },
        data: {
          closed_at: new Date(),
        },
      });
      return updatedRegister;
    }),
  getRegisters: protectedProcedure.query(async ({ ctx }) => {
    const registers = await ctx.prisma.register.findMany({
      include: {
        sales: {
          include: {
            sale_items: {
              include: {
                product: true,
              },
            },
            sale_payments: true,
          },
          orderBy: {
            id: "desc",
          },
        },
      },
      orderBy: {
        id: "desc",
      },
    });
    return { registers };
  }),
});
