import { UUidWithPrefix } from "#components/Ausweis/types.js"
import { authorizationMiddleware } from "#lib/middleware/authorization.js"
import { prisma } from "#lib/server/prisma.js"
import { APIError, defineApiRoute } from "astro-typesafe-api/server"
import { AufnahmeSchema } from "src/generated/zod/aufnahme.js"
import { z } from "zod"

export const PUT = defineApiRoute({
	input: z.object({
		aufnahme: AufnahmeSchema.omit({
			id: true,
			uid: true,
			benutzer_id: true,
			objekt_id: true,
		}).merge(z.object({
			baujahr_klima: z.array(z.number().int().positive()).optional()
		})),
		uid_objekt: UUidWithPrefix
	}),
	output: z.object({
		uid: UUidWithPrefix
	}),
	middleware: authorizationMiddleware,
	async fetch(input, context, user) {
		const objekt = await prisma.objekt.findUnique({
			where: {
				uid: input.uid_objekt,
				benutzer: {
					id: user.id
				}
			}
		})

		if (!objekt) {
			throw new APIError({
				code: "NOT_FOUND",
				message: "Objekt konnte nicht gefunden werden oder gehört nicht diesem Benutzer."
			})
		}

		const aufnahme = await prisma.aufnahme.create({
			data: {
				...input.aufnahme,
				benutzer: {
					connect: {
						id: user.id
					}
				},
				objekt: {
					connect: {
						uid: input.uid_objekt
					}
				}
			},
		})

		return {
			uid: aufnahme.uid
		}
	},
})