# Snapshot do veículo em cada pilar da consolidação. O veículo vive só na tabela
# externa de rastreio (db_reem_simplerout_2026), acessível via tracking_id. Guardar
# uma cópia aqui permite fechar/consolidar POR VEÍCULO sem N+1 e mantém o histórico
# estável mesmo que a base externa mude depois. Lançamentos sintéticos (apontamento
# 100% manual "MAN-*" e entrega de termo "TERMO-*") não têm veículo na rastreio e
# ficam NULL — o agrupamento trata NULL como "(sem veículo)".
class AddVehicleToConsolidacaoEntregas < ActiveRecord::Migration[7.1]
  def up
    unless column_exists?(:consolidacao_entregas, :vehicle)
      add_column :consolidacao_entregas, :vehicle, :string
      add_index  :consolidacao_entregas, %i[consolidacao_id motorista_nome vehicle],
                 name: 'idx_consolidacao_entrega_veiculo'
    end

    # Backfill dos lançamentos já existentes a partir da rastreio. Só roda onde a
    # tabela externa existe (dev/prod) — no banco de teste ela é isolada, então
    # pulamos para não quebrar o db:migrate.
    return unless connection.table_exists?('db_reem_simplerout_2026')

    say_with_time 'backfill vehicle em consolidacao_entregas' do
      execute(<<~SQL.squish)
        UPDATE consolidacao_entregas ce
           SET vehicle = e.vehicle
          FROM db_reem_simplerout_2026 e
         WHERE e.tracking_id = ce.tracking_id
           AND ce.vehicle IS NULL
      SQL
    end
  end

  def down
    if index_exists?(:consolidacao_entregas, %i[consolidacao_id motorista_nome vehicle],
                     name: 'idx_consolidacao_entrega_veiculo')
      remove_index :consolidacao_entregas, name: 'idx_consolidacao_entrega_veiculo'
    end
    remove_column :consolidacao_entregas, :vehicle if column_exists?(:consolidacao_entregas, :vehicle)
  end
end
