/** انتخاب فضای ذخیره فایل بر اساس STORAGE_DRIVER */
import "server-only";
import { env } from "@/lib/env";
import { localStorage } from "./local";
import { s3Storage } from "./s3";
import type { FileStorage } from "./storage";

let instance: FileStorage | undefined;

export function storage(): FileStorage {
  if (instance) return instance;
  const e = env();
  if (e.STORAGE_DRIVER === "s3") {
    const { S3_ENDPOINT, S3_BUCKET, S3_ACCESS_KEY, S3_SECRET_KEY, S3_PUBLIC_URL } = e;
    if (!S3_ENDPOINT || !S3_BUCKET || !S3_ACCESS_KEY || !S3_SECRET_KEY || !S3_PUBLIC_URL) {
      throw new Error("برای STORAGE_DRIVER=s3 باید S3_ENDPOINT، S3_BUCKET، S3_ACCESS_KEY، S3_SECRET_KEY و S3_PUBLIC_URL تنظیم شوند");
    }
    instance = s3Storage({ endpoint: S3_ENDPOINT, region: e.S3_REGION, bucket: S3_BUCKET, accessKey: S3_ACCESS_KEY, secretKey: S3_SECRET_KEY, publicUrl: S3_PUBLIC_URL });
  } else {
    instance = localStorage(e.UPLOAD_DIR);
  }
  return instance;
}
