import { initTRPC, TRPCError } from "@trpc/server";
import type { Context } from "./context.js";

const t = initTRPC.context<Context>().create();

export const router = t.router;
export const publicProcedure = t.procedure;

export const protectedProcedure = t.procedure.use(({ ctx, next }) => {
  if (!ctx.usuario) {
    throw new TRPCError({ code: "UNAUTHORIZED" });
  }
  return next({ ctx: { ...ctx, usuario: ctx.usuario } });
});

export const editorProcedure = t.procedure.use(({ ctx, next }) => {
  if (!ctx.usuario || (ctx.usuario.papel !== "editor" && ctx.usuario.papel !== "admin")) {
    throw new TRPCError({ code: "FORBIDDEN" });
  }
  return next({ ctx: { ...ctx, usuario: ctx.usuario } });
});

export const adminProcedure = t.procedure.use(({ ctx, next }) => {
  if (!ctx.usuario || ctx.usuario.papel !== "admin") {
    throw new TRPCError({ code: "FORBIDDEN" });
  }
  return next({ ctx: { ...ctx, usuario: ctx.usuario } });
});
