const { query } = require('../../utils/db')

const COLS =
  'id, guild_id, bot_token_enc, application_id, enabled, status, status_detail, last_connected_at, updated_by, created_at, updated_at'

// Singleton row (id = 1). Returns null until the admin saves it for the first time.
async function get() {
  const rows = await query(`SELECT ${COLS} FROM bot_config WHERE id = 1 LIMIT 1`)
  return rows[0] || null
}

// Upsert the singleton row. `fields` are column values already prepared by the
// model (token pre-encrypted). Only the provided columns are written/updated.
async function upsert(fields) {
  const cols = Object.keys(fields)
  const vals = cols.map((c) => fields[c])
  const insertCols = ['id', ...cols].map((c) => `\`${c}\``).join(', ')
  const placeholders = ['1', ...cols.map(() => '?')].join(', ')
  const updates = cols.map((c) => `\`${c}\` = VALUES(\`${c}\`)`).join(', ')
  await query(
    `INSERT INTO bot_config (${insertCols}) VALUES (${placeholders})
     ON DUPLICATE KEY UPDATE ${updates}`,
    vals,
  )
  return get()
}

module.exports = { get, upsert }
