import { Router } from "express";
import { z } from "zod";
import { getAccessibleBoardIds } from "../lib/authz";
import { prisma } from "../lib/prisma";
import { requireAuth } from "../middleware/requireAuth";

export const searchRouter = Router();
searchRouter.use(requireAuth);

const querySchema = z.object({ q: z.string().min(1).max(200) });

searchRouter.get("/", async (req, res, next) => {
  try {
    const { q } = querySchema.parse(req.query);
    const boardIds = await getAccessibleBoardIds(req.userId!);

    if (boardIds.length === 0) {
      res.json({ cards: [], boards: [] });
      return;
    }

    const [cards, boards] = await Promise.all([
      prisma.card.findMany({
        where: { boardId: { in: boardIds }, isArchived: false, title: { contains: q } },
        include: { list: { include: { board: true } } },
        take: 25,
      }),
      prisma.board.findMany({
        where: { id: { in: boardIds }, isArchived: false, name: { contains: q } },
        take: 10,
      }),
    ]);

    res.json({ cards, boards });
  } catch (err) {
    next(err);
  }
});
