import { serve } from "@hono/node-server";
import { config } from "dotenv";
import { Hono } from "hono";
import { cors } from "hono/cors";
import { validateLemonSqueezyLicense } from "./utils";

config();

const app = new Hono();

app.use(
	"/*",
	cors({
		origin: ["http://localhost:3000", "http://localhost:3001"], // Ajusta esto a los orígenes de tu aplicación Next.js
		allowMethods: ["GET", "POST", "PUT", "DELETE", "OPTIONS"],
		allowHeaders: ["Content-Type", "Authorization"],
		exposeHeaders: ["Content-Length", "X-Kuma-Revision"],
		maxAge: 600,
		credentials: true,
	}),
);

export const LEMON_SQUEEZY_API_KEY = process.env.LEMON_SQUEEZY_API_KEY;
export const LEMON_SQUEEZY_STORE_ID = process.env.LEMON_SQUEEZY_STORE_ID;

app.get("/v1/health", (c) => {
	return c.text("Hello Hono!");
});

app.post("/v1/validate-license", async (c) => {
	const { licenseKey } = await c.req.json();

	if (!licenseKey) {
		return c.json({ error: "License key is required" }, 400);
	}

	try {
		const licenseValidation = await validateLemonSqueezyLicense(licenseKey);

		if (licenseValidation.valid) {
			return c.json({
				valid: true,
				message: "License is valid",
				metadata: licenseValidation.meta,
			});
		}
		return c.json(
			{
				valid: false,
				message: licenseValidation.error || "Invalid license",
			},
			400,
		);
	} catch (error) {
		console.error("Error during license validation:", error);
		return c.json({ error: "Internal server error" }, 500);
	}
});

const port = 4000;
console.log(`Server is running on port ${port}`);

serve({
	fetch: app.fetch,
	port,
});
