import { eq } from "drizzle-orm";
import { registerDeviceRequestSchema } from "@familyalbum/shared";
import { buildAuthHooks } from "../plugins/auth.js";
import { jsonSchema } from "../lib/json-schema.js";
import { db } from "../db/client.js";
import { devices } from "../db/schema.js";
/**
 * Inscription d'un appareil pour les notifications push (phase 8 — le
 * relais d'envoi reste à trancher pour « rien d'externe »).
 * Un appareil par utilisateur : l'inscription écrase le token précédent.
 */
export function registerDeviceRoutes(app) {
    const { authenticate } = buildAuthHooks(app);
    app.post("/devices", {
        schema: { body: jsonSchema(registerDeviceRequestSchema) },
        preHandler: [authenticate],
    }, async (request, reply) => {
        const user = request.user;
        const userId = user?.sub;
        if (!userId)
            throw new Error("authenticate n'a pas posé le token");
        const { expoPushToken, platform, locale } = request.body;
        const [existing] = db
            .select({ id: devices.id })
            .from(devices)
            .where(eq(devices.userId, userId))
            .limit(1)
            .all();
        if (existing) {
            db.update(devices)
                // locale mise à jour à chaque POST (upsert) : le changement de
                // langue côté app re-localise les push sans nouvelle inscription.
                .set({ expoPushToken, platform, locale, lastSeenAt: new Date() })
                .where(eq(devices.id, existing.id))
                .run();
        }
        else {
            db.insert(devices)
                .values({ userId, expoPushToken, platform, locale, lastSeenAt: new Date() })
                .run();
        }
        reply.send({ ok: true });
    });
}
//# sourceMappingURL=devices.js.map