// bot/src/commands/list.ts — Handler do subcomando /bot list
//
// RF-15: lê apenas do SQLite, sem chamar IA.
// S-04: erros são redactSecrets antes de logar/enviar ao Slack.

import { cardRepository } from '../db/cardRepository'
import { redactSecrets } from './bot'

const MAX_INLINE_CHARS = 3000

export async function handleList(
  command: any,
  respond: any,
  client: any,
): Promise<void> {
  const userId: string = command.user_id

  try {
    const cards = cardRepository.listByUser(userId)

    if (cards.length === 0) {
      await respond({ text: 'Você não tem cards em andamento.', response_type: 'ephemeral' })
      return
    }

    const linhas = cards.map((c) => `• ${c.card_id} — ${c.titulo}`)
    const corpo = `*Seus cards em andamento:*\n${linhas.join('\n')}`

    if (corpo.length > MAX_INLINE_CHARS) {
      // Upload como arquivo (improvável para list, mas segue o padrão)
      await client.files.uploadV2({
        channel_id: command.channel_id,
        content: corpo,
        filename: 'cards.txt',
        title: 'Seus cards em andamento',
      })
    } else {
      await respond({ text: corpo, response_type: 'ephemeral' })
    }
  } catch (err) {
    const msg = redactSecrets(String(err instanceof Error ? err.message : err))
    console.error('[list] erro ao listar cards:', msg)
    await respond({ text: `❌ Erro ao listar cards: ${msg}`, response_type: 'ephemeral' })
  }
}
