require 'rails_helper'

# É o que dispensa a SEGUNDA PLANILHA do programa Python: o STATUS (NOVO/RECORRENTE)
# já está na tabela da operação.
RSpec.describe Romaneios::EnriquecimentoGade do
  include_context 'tabela de operação'

  let(:tabela) { "#{Operacao::PREFIXO}teste_jan_2026" }

  it 'marca APARELHO = SIM só para quem está como NOVO' do
    criar_operacao!(tabela)
    semear_operacao!(tabela, [
                       { nota_fiscal: '1', nome_completo: 'Novo Paciente', telefones: '(11) 1',
                         status: 'NOVO' },
                       { nota_fiscal: '2', nome_completo: 'Velho Paciente', telefones: '(11) 2',
                         status: 'RECORRENTE' }
                     ])

    dados = described_class.new(tabela).para_notas(%w[1 2])

    expect(dados['1'][:aparelho]).to eq('SIM')
    expect(dados['2'][:aparelho]).to eq('')
    expect(dados['1'][:nome]).to eq('NOVO PACIENTE')
    expect(dados['2'][:telefones]).to eq('(11) 2')
  end

  it 'não quebra quando a operação não tem a coluna status — e AVISA qual falta' do
    criar_operacao!(tabela, colunas: %i[nome_completo telefones])
    semear_operacao!(tabela, [{ nota_fiscal: '1', nome_completo: 'Fulano', telefones: '(11) 1' }])

    servico = described_class.new(tabela)

    expect(servico.colunas_ausentes).to eq(['status'])
    expect(servico.para_notas(['1'])['1'][:aparelho]).to eq('')
  end

  it 'omite a NF que não está na operação (é o plano avulso / de inclusão)' do
    criar_operacao!(tabela)
    semear_operacao!(tabela, [{ nota_fiscal: '1', status: 'NOVO' }])

    expect(described_class.new(tabela).para_notas(%w[1 999])).not_to have_key('999')
  end

  it 'recusa nome de tabela fora da whitelist de operações' do
    expect { described_class.new('users; DROP TABLE users') }.to raise_error(ArgumentError)
  end
end
