/**
 * 應用配置工具類
 * 用於管理環境變量和應用設置
 */

// 資料庫配置
export const dbConfig = {
  host: process.env.DB_HOST || 'mysql.theaken.com',
  port: parseInt(process.env.DB_PORT || '33306'),
  user: process.env.DB_USER || 'root',
  password: process.env.DB_PASSWORD || 'zh6161168',
  database: process.env.DB_NAME || 'db_AI_scoring',
  charset: 'utf8mb4',
  timezone: '+08:00',
  acquireTimeout: 60000,
  timeout: 60000,
  reconnect: true,
  multipleStatements: true,
} as const

// AI 配置
export const aiConfig = {
  geminiApiKey: process.env.GEMINI_API_KEY || 'AIzaSyAN3pEJr_Vn2xkCidGZAq9eQqsMVvpj8g4',
  modelName: process.env.GEMINI_MODEL || 'gemini-1.5-pro',
  maxTokens: parseInt(process.env.GEMINI_MAX_TOKENS || '8192'),
} as const

// 獲取應用基礎 URL
export function getAppUrl(): string {
  // 在客戶端使用 window.location.origin
  if (typeof window !== 'undefined') {
    return window.location.origin
  }
  
  // 在服務端使用環境變量，如果沒有設置則使用 localhost:12024
  return process.env.NEXT_PUBLIC_APP_URL || 'http://localhost:12024'
}

// 獲取應用名稱
export function getAppName(): string {
  return process.env.NEXT_PUBLIC_APP_NAME || 'AI 智能評審系統'
}

// 生成分享連結
export function generateShareUrl(evaluationId: string): string {
  const baseUrl = getAppUrl()
  return `${baseUrl}/results?id=${evaluationId}`
}

// 生成當前頁面連結
export function getCurrentUrl(): string {
  if (typeof window !== 'undefined') {
    return window.location.href
  }
  return getAppUrl()
}

// 環境變量配置
export const config = {
  appUrl: getAppUrl(),
  appName: getAppName(),
  isDevelopment: process.env.NODE_ENV === 'development',
  isProduction: process.env.NODE_ENV === 'production',
  database: dbConfig,
  ai: aiConfig,
} as const

// 配置驗證
export function validateConfig(): { isValid: boolean; errors: string[] } {
  const errors: string[] = []
  
  // 檢查必要的環境變量
  if (!process.env.GEMINI_API_KEY) {
    errors.push('GEMINI_API_KEY 環境變量未設置')
  }
  
  if (!process.env.DB_HOST) {
    errors.push('DB_HOST 環境變量未設置')
  }
  
  if (!process.env.DB_NAME) {
    errors.push('DB_NAME 環境變量未設置')
  }
  
  return {
    isValid: errors.length === 0,
    errors
  }
}
