# app/models/consolidacao_entrega.rb
class ConsolidacaoEntrega < ApplicationRecord
  # Nome da tabela fixado (mesmo motivo de ConsolidacaoMotorista — inflector pt-BR).
  self.table_name = 'consolidacao_entregas'

  belongs_to :consolidacao

  # Apontamentos manuais — entregas incluídas por fora do período/operação
  # (ex.: nota que chegou depois). Buscadas pela NF direto na SimpleRoute.
  scope :apontamentos, -> { where(manual: true) }

  enum tipo: {
    entrega_normal: 0,
    retirada:       1,
    bonus:          2,
    desconto:       3,
    extraordinaria: 4,
    termo:          5,
    termo_especial: 6
  }

  TIPO_CORES = {
    'entrega_normal' => { bg: 'bg-orange-500',      text: 'text-white',  label: 'Entrega Normal'  },
    'retirada'       => { bg: 'bg-orange-800',      text: 'text-white',  label: 'Retirada'        },
    'bonus'          => { bg: 'bg-white border border-orange-500', text: 'text-black', label: 'Bônus' },
    'desconto'       => { bg: 'bg-gray-900',        text: 'text-white',  label: 'Desconto'        },
    'extraordinaria' => { bg: 'bg-purple-600',      text: 'text-white',  label: 'Entrega Extraordinária' },
    'termo'          => { bg: 'bg-blue-600',        text: 'text-white',  label: 'Entrega de Termo' },
    'termo_especial' => { bg: 'bg-cyan-600',        text: 'text-white',  label: 'Entrega de Termo Especial' }
  }.freeze

  # Uma entrega pode ter vários pilares (Normal + Bônus + Retirada…),
  # mas não o mesmo pilar repetido.
  validates :tracking_id,    presence: true, uniqueness: { scope: %i[consolidacao_id tipo] }
  validates :motorista_nome, presence: true
  validates :tipo,           presence: true
  validates :valor_aplicado, presence: true, numericality: { greater_than_or_equal_to: 0 }
  validates :quantidade,     numericality: { greater_than: 0 }

  # Busca a entrega original (leitura do banco existente)
  def entrega_original
    @entrega_original ||= Entrega.find_by(tracking_id: tracking_id)
  end

  def tipo_cor
    TIPO_CORES[tipo] || TIPO_CORES['entrega_normal']
  end

  # Preço configurado para um pilar (tipo). Fonte única usada na classificação
  # (controller) e no apontamento manual (Consolidacao#adicionar_apontamento!).
  def self.valor_para(tipo)
    case tipo.to_s
    when 'entrega_normal' then Configuracao.preco_entrega
    when 'retirada'       then Configuracao.preco_retirada
    when 'bonus'          then Configuracao.preco_bonus
    when 'desconto'       then Configuracao.preco_desconto
    when 'extraordinaria' then Configuracao.preco_extraordinaria
    when 'termo'          then Configuracao.preco_termo
    when 'termo_especial' then Configuracao.preco_termo_especial
    else 0
    end
  end
end
