"use server";

import { initDb } from "@/lib/db";
import { hashPassword } from "@/lib/auth/credentials";
import { registerSchema } from "@/lib/validation/auth";
import { getPlatformSettings } from "@/lib/queries/system-settings-queries";
import type { RegisterInput } from "@/lib/validation/auth";

export type ActionResult<T = void> =
  | { success: true; data?: T }
  | { success: false; error: string };

/** Register a new client account. */
export async function registerUser(
  input: RegisterInput
): Promise<ActionResult<{ email: string }>> {
  const parsed = registerSchema.safeParse(input);
  if (!parsed.success) {
    return {
      success: false,
      error: parsed.error.issues[0]?.message ?? "Invalid input",
    };
  }

  const platform = await getPlatformSettings();
  if (!platform.signupsEnabled) {
    return { success: false, error: "New signups are temporarily disabled." };
  }

  const { User } = initDb();
  const email = parsed.data.email.toLowerCase();
  const existing = await User.findOne({ where: { email } });
  if (existing) {
    return { success: false, error: "An account with this email already exists" };
  }

  const passwordHash = await hashPassword(parsed.data.password);

  await User.create({
    name: parsed.data.name,
    email,
    passwordHash,
    role: "client",
    workspaceId: null,
  });

  return { success: true, data: { email } };
}
