import { and, eq } from "drizzle-orm";
import { Hono } from "hono";
import { settings } from "../../db/schema.ts";

type Env = { Variables: { db?: any; userId?: number } };

const app = new Hono<Env>();

app.get("/:key", async (c) => {
	const database = c.get("db");
	const userId = c.get("userId")!;
	const key = c.req.param("key");
	const [row] = await database
		.select()
		.from(settings)
		.where(and(eq(settings.userId, userId), eq(settings.key, key)));
	if (!row) return c.json({ error: "Setting not found" }, 404);
	return c.json(row);
});

app.put("/:key", async (c) => {
	const database = c.get("db");
	const userId = c.get("userId")!;
	const key = c.req.param("key");
	const body = await c.req.json<{ value: string }>();

	if (!body.value && body.value !== "") {
		return c.json({ error: "value is required" }, 400);
	}

	await database
		.insert(settings)
		.values({ userId, key, value: body.value })
		.onConflictDoUpdate({
			target: [settings.userId, settings.key],
			set: { value: body.value },
		});

	const [row] = await database
		.select()
		.from(settings)
		.where(and(eq(settings.userId, userId), eq(settings.key, key)));
	return c.json(row);
});

export { app as settingsRoutes };
