import type Koa from "koa";
import { Users, UserPendings, UserProfiles } from "@/models/index.js";
import { signup } from "../common/signup.js";
import signin from "../common/signin.js";

export default async (ctx: Koa.Context) => {
	const body = ctx.request.body;

	const code = body["code"];

	try {
		const pendingUser = await UserPendings.findOneByOrFail({ code });

		const { account, secret } = await signup({
			username: pendingUser.username,
			passwordHash: pendingUser.password,
		});

		UserPendings.delete({
			id: pendingUser.id,
		});

		const profile = await UserProfiles.findOneByOrFail({ userId: account.id });

		await UserProfiles.update(
			{ userId: profile.userId },
			{
				email: pendingUser.email,
				emailVerified: true,
				emailVerifyCode: null,
			},
		);

		signin(ctx, account);
	} catch (e) {
		ctx.throw(400, e);
	}
};
