# app/models/configuracao.rb
class Configuracao < ApplicationRecord
  self.table_name = 'configuracoes'

  # Chaves válidas do sistema
  CHAVES = %w[
    preco_entrega
    preco_retirada
    preco_bonus
    preco_desconto
    preco_extraordinaria
    preco_termo
    preco_termo_especial
    # ⚠️ OBSOLETAS: quem liga/desliga notificação agora é ConfiguracaoNotificacao
    # (tela /admin/configuracao_notificacao). Nenhum código lê estas duas chaves
    # desde a migration CreateConfiguracaoNotificacoes, que copiou os valores.
    # Continuam aqui só para não quebrar as linhas já existentes no banco.
    notificacao_whatsapp
    notificacao_email
    empresa_nome
    empresa_logo
    # Logo impresso no romaneio (documento do CLIENTE — hoje a GADE, por isso é
    # separado do `empresa_logo`, que é a marca da Reem). Guarda só o NOME do
    # arquivo; o binário vive em storage/logos/. Vazio = usa public/logo-gade.png.
    romaneio_logo
  ].freeze

  CHAVES_MOEDA = %w[
    preco_entrega
    preco_retirada
    preco_bonus
    preco_desconto
    preco_extraordinaria
    preco_termo
    preco_termo_especial
  ].freeze

  validates :chave,  presence: true, inclusion: { in: CHAVES }, uniqueness: true
  validates :valor,  presence: true

  # ── Acesso rápido ───────────────────────────────────────────

  def self.valor(chave)
    find_by(chave: chave)&.valor
  end

  def self.preco_entrega
    valor('preco_entrega').to_f
  end

  def self.preco_retirada
    valor('preco_retirada').to_f
  end

  def self.preco_bonus
    valor('preco_bonus').to_f
  end

  def self.preco_desconto
    valor('preco_desconto').to_f
  end

  def self.preco_extraordinaria
    valor('preco_extraordinaria').to_f
  end

  def self.preco_termo
    valor('preco_termo').to_f
  end

  def self.preco_termo_especial
    valor('preco_termo_especial').to_f
  end

  # Mapa usado pelo DashboardController (Fase 3)
  def self.mapa_de_precos
    {
      entrega:        preco_entrega,
      retirada:       preco_retirada,
      bonus:          preco_bonus,
      desconto:       preco_desconto,
      extraordinaria: preco_extraordinaria,
      termo:          preco_termo,
      termo_especial: preco_termo_especial
    }
  end

  LABELS = {
    'preco_entrega'        => 'Entrega Normal',
    'preco_retirada'       => 'Retirada',
    'preco_bonus'          => 'Bônus',
    'preco_desconto'       => 'Desconto',
    'preco_extraordinaria' => 'Entrega Extraordinária',
    'preco_termo'          => 'Entrega de Termo',
    'preco_termo_especial' => 'Entrega de Termo Especial',
    'notificacao_whatsapp' => 'Notificação WhatsApp',
    'notificacao_email'    => 'Notificação E-mail',
    'empresa_nome'         => 'Nome da Empresa'
  }.freeze

  ICONES = {
    'preco_entrega'        => '🚚',
    'preco_retirada'       => '📦',
    'preco_bonus'          => '⭐',
    'preco_desconto'       => '⚠️',
    'preco_extraordinaria' => '✨',
    'preco_termo'          => '📄',
    'preco_termo_especial' => '📋',
    'notificacao_whatsapp' => '💬',
    'notificacao_email'    => '✉️',
    'empresa_nome'         => '🏢'
  }.freeze

  # Usados pelas views admin/configuracoes (Fase 2)
  def tipo_label
    LABELS[chave] || chave.humanize
  end

  def icone
    ICONES[chave] || '⚙️'
  end

  def moeda?
    CHAVES_MOEDA.include?(chave)
  end

  def valor_formatado
    if moeda?
      inteiro, decimais = format('%.2f', valor.to_f).split('.')
      inteiro = inteiro.reverse.gsub(/(\d{3})(?=\d)/, '\1.').reverse
      return "R$ #{inteiro},#{decimais}"
    end
    valor
  end
end
