import { createRoute, OpenAPIHono, z } from "@hono/zod-openapi";
import { postLabelData } from "../controller/postRunningNr.js";
import { apiHit } from "../../../globalUtils/apiHits.js";
import { pickedup } from "../controller/pickedup.js";

const app = new OpenAPIHono();

const PostRunningNr = z.object({
    sscc: z.string().optional().openapi({ example: "00090103830005710997" }),
    runningNr: z.string().optional().openapi({ example: "localhost" }),
    areaFrom: z
        .string()
        .optional()
        .openapi({ example: "The server we are going to connect to" }),
    completed: z.boolean().optional().openapi({ example: true }),
    all: z.boolean().optional().openapi({ example: false }),
});

app.openapi(
    createRoute({
        tags: ["ocme"],
        summary: "Picks up a pallet in the system.",
        method: "patch",
        description:
            "removes the pallet(s) from showing as needed to be picked up, we clear everything related to the pallet number to reduce the risk of a mix, passing `all` will just clear everything that is pending.",
        path: "/pickedUp",
        request: {
            body: {
                content: {
                    "application/json": { schema: PostRunningNr },
                },
            },
        },
        responses: {
            200: {
                content: {
                    "application/json": {
                        schema: z.object({
                            success: z.boolean().openapi({ example: true }),
                            message: z.string().openapi({ example: "Starter" }),
                            // data: z
                            // .array(z.object({sscc: z.string().optional()}))
                            // .optional()
                            // .openapi({example: []}),
                        }),
                    },
                },
                description: "Response message",
            },
            400: {
                content: {
                    "application/json": {
                        schema: z.object({
                            success: z.boolean().openapi({ example: false }),
                            message: z
                                .string()
                                .optional()
                                .openapi({ example: "Internal Server error" }),
                            data: z
                                .array(z.object({}))
                                .optional()
                                .openapi({ example: [] }),
                        }),
                    },
                },
                description: "Internal Server Error",
            },
            // 401: {
            //     content: {
            //         "application/json": {
            //             schema: z.object({message: z.string().optional().openapi({example: "Unauthenticated"})}),
            //         },
            //     },
            //     description: "Unauthorized",
            // },
            500: {
                content: {
                    "application/json": {
                        schema: z.object({
                            message: z
                                .string()
                                .optional()
                                .openapi({ example: "Internal Server error" }),
                        }),
                    },
                },
                description: "Internal Server Error",
            },
        },
    }),
    async (c) => {
        // make sure we have a vaid user being accessed thats really logged in
        try {
            const data = await c.req.json();
            apiHit(c, { endpoint: "/pickedup", lastBody: data });
            const postPallet = await pickedup(data);
            return c.json(
                {
                    success: postPallet.success,
                    message: postPallet.message,
                    data: postPallet.data,
                },
                200
            );
        } catch (error) {
            return c.json(
                {
                    success: false,
                    message: "There was an error getting ocmeInfo data",
                    data: error,
                },
                400
            );
        }
    }
);
export default app;
