const db = require('../db')

// Upsert — re-granting the same temp role refreshes its expiry instead of
// creating a duplicate row (see UNIQUE(guild,user,role) in schema.sql).
async function add({ guildId, userId, roleId, expiresAt, createdBy }) {
  await db.query(
    `INSERT INTO temp_roles (guild_id, user_id, role_id, expires_at, created_by)
     VALUES (?, ?, ?, ?, ?)
     ON DUPLICATE KEY UPDATE expires_at = VALUES(expires_at), created_by = VALUES(created_by)`,
    [guildId, userId, roleId, expiresAt, createdBy || null],
  )
}

async function remove(guildId, userId, roleId) {
  await db.query('DELETE FROM temp_roles WHERE guild_id = ? AND user_id = ? AND role_id = ?', [guildId, userId, roleId])
}

async function listExpired() {
  return db.query('SELECT id, guild_id, user_id, role_id FROM temp_roles WHERE expires_at <= NOW()')
}

async function removeById(id) {
  await db.query('DELETE FROM temp_roles WHERE id = ?', [id])
}

module.exports = { add, remove, listExpired, removeById }
