import { createScopedLogger } from '~/lib/.server/logger';
import { LocalStorageProvider } from './local-provider.server';
import type { StorageProvider } from './types';

const logger = createScopedLogger('storage');

/**
 * 获取存储目录配置
 * @returns 存储目录路径
 */
const getStorageDir = (): string | undefined => {
  // 如果在Docker环境中运行，使用环境变量中的配置
  if (process.env.RUNNING_IN_DOCKER === 'true' && process.env.STORAGE_DIR) {
    logger.debug('使用Docker环境中的存储目录', JSON.stringify({ dir: process.env.STORAGE_DIR }));
    return process.env.STORAGE_DIR;
  }

  // 使用环境变量中的配置
  if (process.env.STORAGE_DIR) {
    logger.debug('使用环境变量中的存储目录', JSON.stringify({ dir: process.env.STORAGE_DIR }));
    return process.env.STORAGE_DIR;
  }

  // 默认使用项目根目录下的 public/uploads 目录
  logger.debug('使用默认存储目录');
  return undefined;
};

const createStorageProvider = (): StorageProvider => {
  return new LocalStorageProvider(getStorageDir());
};

export const storageProvider = createStorageProvider();

export * from './types';
