require 'rails_helper'

RSpec.describe ConsolidacaoEntrega, type: :model do
  describe 'validações' do
    it 'exige tracking_id, motorista_nome, tipo e valor_aplicado' do
      ce = ConsolidacaoEntrega.new
      ce.valid?
      expect(ce.errors[:tracking_id]).to be_present
      expect(ce.errors[:motorista_nome]).to be_present
      expect(ce.errors[:valor_aplicado]).to be_present
    end

    it 'rejeita valor_aplicado negativo' do
      expect(build(:consolidacao_entrega, valor_aplicado: -1)).not_to be_valid
    end

    it 'não permite o mesmo tracking_id com o MESMO tipo na consolidação' do
      consolidacao = create(:consolidacao)
      create(:consolidacao_entrega, consolidacao: consolidacao, tracking_id: 'TRK-1', tipo: :entrega_normal)
      dup = build(:consolidacao_entrega, consolidacao: consolidacao, tracking_id: 'TRK-1', tipo: :entrega_normal)
      expect(dup).not_to be_valid
    end

    it 'permite o mesmo tracking_id com pilares DIFERENTES (multi-pilar)' do
      consolidacao = create(:consolidacao)
      create(:consolidacao_entrega, consolidacao: consolidacao, tracking_id: 'TRK-1', tipo: :entrega_normal)
      outro = build(:consolidacao_entrega, consolidacao: consolidacao, tracking_id: 'TRK-1', tipo: :bonus)
      expect(outro).to be_valid
    end

    it 'permite o mesmo tracking_id em consolidações diferentes' do
      create(:consolidacao_entrega, tracking_id: 'TRK-X')
      outra = build(:consolidacao_entrega, tracking_id: 'TRK-X')
      expect(outra).to be_valid
    end
  end

  describe '#tipo_cor' do
    it 'retorna o mapa de cores do tipo' do
      ce = build(:consolidacao_entrega, tipo: :retirada)
      expect(ce.tipo_cor[:label]).to eq('Retirada')
    end
  end
end
