import { betterAuth } from "better-auth";
import { drizzleAdapter } from "better-auth/adapters/drizzle";
import { useDrizzle } from "./db.js";
import * as schema from "@/db/schema.ts";
import { admin, bearer, username } from "better-auth/plugins";
import { passkey } from "@better-auth/passkey";

const webOrigin = process.env.WEB_ORIGIN ?? "http://localhost:3000";
const rpID = new URL(webOrigin).hostname;

// 从 WEB_ORIGIN 的主机名推导父域（如 csms.uniiem.com → uniiem.com），
// 用于跨子域共享 session cookie；本地开发时返回 undefined 不启用。
function getParentDomain(hostname: string): string | undefined {
  if (hostname === "localhost" || /^\d/.test(hostname)) return undefined;
  const parts = hostname.split(".");
  return parts.length >= 3 ? parts.slice(1).join(".") : undefined;
}

const cookieDomain = process.env.COOKIE_DOMAIN ?? getParentDomain(rpID);

export const auth = betterAuth({
  database: drizzleAdapter(useDrizzle(), {
    provider: "pg",
    schema: {
      ...schema,
    },
  }),
  trustedOrigins: [webOrigin],
  appName: "Helios EVCS",
  user: {
    additionalFields: {},
  },
  emailAndPassword: {
    enabled: true,
  },
  plugins: [
    admin(),
    username(),
    bearer(),
    passkey({
      rpID,
      rpName: "Helios EVCS",
      origin: webOrigin,
    }),
  ],
  advanced: {
    cookiePrefix: "helios",
    defaultCookieAttributes: {
      httpOnly: true,
      secure: true,
      sameSite: "none",
      domain: cookieDomain,
    },
    crossSubdomainCookies: cookieDomain
      ? { enabled: true, domain: cookieDomain }
      : { enabled: false },
  },
});
