import "server-only";
import { db } from "./db";

export async function getSettings(keys: string[]): Promise<Record<string, string>> {
  const rows = await db.setting.findMany({ where: { key: { in: keys } } });
  return Object.fromEntries(rows.map((r) => [r.key, r.value]));
}

export async function setSetting(key: string, value: string) {
  if (value === "") {
    await db.setting.deleteMany({ where: { key } });
    return;
  }
  await db.setting.upsert({ where: { key }, create: { key, value }, update: { value } });
}

export type S3Config = {
  bucket: string;
  region: string;
  accessKeyId?: string;
  secretAccessKey?: string;
  publicUrl?: string;
  source: "settings" | "env";
};

/** S3 config precedence: admin System settings → environment variables → none (local storage). */
export async function getS3Config(): Promise<S3Config | null> {
  const s = await getSettings(["s3.bucket", "s3.region", "s3.accessKeyId", "s3.secretAccessKey", "s3.publicUrl"]);
  if (s["s3.bucket"]) {
    return {
      bucket: s["s3.bucket"],
      region: s["s3.region"] || "ap-south-1",
      accessKeyId: s["s3.accessKeyId"] || undefined,
      secretAccessKey: s["s3.secretAccessKey"] || undefined,
      publicUrl: s["s3.publicUrl"] || undefined,
      source: "settings",
    };
  }
  if (process.env.S3_BUCKET) {
    return {
      bucket: process.env.S3_BUCKET,
      region: process.env.S3_REGION || "ap-south-1",
      publicUrl: process.env.S3_PUBLIC_URL || undefined,
      source: "env", // credentials via the SDK default chain (env/instance role)
    };
  }
  return null;
}
