import pg from 'pg'

const { Pool } = pg

// ============================================================
// wing DB 통합 Pool (wing 스키마 + auth 스키마)
// - wing 스키마: 운영 데이터 (LAYER, BOARD_POST 등)
// - auth 스키마: 인증/인가 데이터 (AUTH_USER, AUTH_ROLE 등)
// - public 스키마: PostGIS 시스템 테이블만 유지
// ============================================================
const wingPool = new Pool({
  host: process.env.DB_HOST || process.env.WING_DB_HOST || 'localhost',
  port: Number(process.env.DB_PORT || process.env.WING_DB_PORT) || 5432,
  database: process.env.DB_NAME || process.env.WING_DB_NAME || 'wing',
  user: process.env.DB_USER || process.env.WING_DB_USER || 'wing',
  password: process.env.DB_PASSWORD || process.env.WING_DB_PASSWORD || 'Wing2026',
  max: 20,
  idleTimeoutMillis: 30000,
  connectionTimeoutMillis: 5000,
})

// 연결 시 search_path 자동 설정 (public 미사용)
wingPool.on('connect', (client) => {
  client.query('SET search_path = wing, auth, public')
})

wingPool.on('error', (err) => {
  console.error('[db] 예기치 않은 연결 오류:', err.message)
})

export async function testWingDbConnection(): Promise<boolean> {
  try {
    const client = await wingPool.connect()
    await client.query('SELECT 1')
    client.release()
    console.log('[db] wing 데이터베이스 연결 성공 (wing + auth 스키마)')
    return true
  } catch (err) {
    console.warn('[db] wing 데이터베이스 연결 실패:', (err as Error).message)
    return false
  }
}

export { wingPool }
