import { VERSION } from "@elysia/src";
import { Elysia, t } from "elysia";

export const pingHandler = new Elysia({ prefix: "/ping" }).get(
	"/",
	async (c) => {
		return {
			message: "pong",
			request: {
				headers: c.headers,
				ip: c.server?.requestIP(c.request)?.address,
				method: c.request.method,
				body: c.body,
				url: c.request.url
			},
			response: {
				time: new Date().getTime(),
				status: 200,
				version: VERSION
			}
		};
	},
	{
		response: {
			200: t.Object({
				message: t.String(),
				request: t.Object({
					headers: t.Any(),
					ip: t.Optional(t.String()),
					method: t.String(),
					body: t.Optional(t.Union([t.String(), t.Null()])),
					url: t.String()
				}),
				response: t.Object({
					time: t.Number(),
					status: t.Number(),
					version: t.String()
				})
			})
		},
		body: t.Optional(t.String()),
		detail: {
			summary: "Send a ping",
			description:
				"This endpoint returns a 'pong' message along with comprehensive information about the incoming request and the server's current status, including request headers, IP address, and server version. It's useful for monitoring API availability and debugging."
		}
	}
);
