import { CreateClientSchema } from "@capakraken/shared";
import {
  adminProcedure,
  createTRPCRouter,
  managerProcedure,
  planningReadProcedure,
  protectedProcedure,
} from "../trpc.js";
import {
  batchUpdateClientSortOrder,
  clientBatchSortOrderInputSchema,
  clientIdInputSchema,
  clientIdentifierInputSchema,
  clientListInputSchema,
  clientTreeInputSchema,
  clientUpdateInputSchema,
  createClient,
  deactivateClient,
  deleteClient,
  getClientById,
  getClientByIdentifier,
  getClientTree,
  listClients,
  resolveClientByIdentifier,
  updateClient,
} from "./client-procedure-support.js";

export const clientRouter = createTRPCRouter({
  list: planningReadProcedure
    .input(clientListInputSchema)
    .query(({ ctx, input }) => listClients(ctx, input)),

  getTree: planningReadProcedure
    .input(clientTreeInputSchema)
    .query(({ ctx, input }) => getClientTree(ctx, input)),

  getById: planningReadProcedure
    .input(clientIdInputSchema)
    .query(({ ctx, input }) => getClientById(ctx, input)),

  resolveByIdentifier: protectedProcedure
    .input(clientIdentifierInputSchema)
    .query(({ ctx, input }) => resolveClientByIdentifier(ctx, input)),

  getByIdentifier: planningReadProcedure
    .input(clientIdentifierInputSchema)
    .query(({ ctx, input }) => getClientByIdentifier(ctx, input)),

  create: managerProcedure
    .input(CreateClientSchema)
    .mutation(({ ctx, input }) => createClient(ctx, input)),

  update: managerProcedure
    .input(clientUpdateInputSchema)
    .mutation(({ ctx, input }) => updateClient(ctx, input)),

  deactivate: managerProcedure
    .input(clientIdInputSchema)
    .mutation(({ ctx, input }) => deactivateClient(ctx, input)),

  delete: adminProcedure
    .input(clientIdInputSchema)
    .mutation(({ ctx, input }) => deleteClient(ctx, input)),

  batchUpdateSortOrder: managerProcedure
    .input(clientBatchSortOrderInputSchema)
    .mutation(({ ctx, input }) => batchUpdateClientSortOrder(ctx, input)),
});
