import { createRoute, OpenAPIHono, z } from "@hono/zod-openapi";
import { responses } from "../../../globalUtils/routeDefs/responses.js";
import { tryCatch } from "../../../globalUtils/tryCatch.js";
import { getCycleCountCheck } from "../controller/warehouse/cycleCountChecks/getCycleCountCheck.js";
import { apiHit } from "../../../globalUtils/apiHits.js";

const app = new OpenAPIHono();

const Body = z
    .object({
        age: z.number().optional().openapi({ example: 90 }),
        //email: z.string().optional().openapi({example: "s.smith@example.com"}),
        type: z.string().optional().openapi({ example: "fg" }),
    })
    .openapi("User");
app.openapi(
    createRoute({
        tags: ["logistics"],
        summary: "Returns lanes that need cycle counted",
        method: "post",
        path: "/cyclecountcheck",
        request: {
            body: {
                content: {
                    "application/json": { schema: Body },
                },
            },
        },
        // description:
        //     "Provided a running number and lot number you can consume material.",
        responses: responses(),
    }),
    async (c: any) => {
        apiHit(c, { endpoint: "/cyclecountcheck" });
        const { data: body, error: be } = await tryCatch(c.req.json());

        if (be) {
            return c.json({ success: false, message: "Missing Data." });
        }

        const check: any = body ?? { age: 90, type: null };
        const { data: lanes, error: le } = await tryCatch(
            getCycleCountCheck(check.age, check.type)
        );

        if (le) {
            return c.json({
                success: false,
                message: "Error getting lane data.",
                data: le,
            });
        }

        return c.json({
            success: lanes.success,
            message: lanes.message,
            data: lanes.data,
        });
    }
);
export default app;
