# app/controllers/admin/planilhas_simpliroute_controller.rb
#
# Gera a planilha de carga do SimpliRoute (.xlsx) a partir de UMA operação
# vigente. Lat/long são preenchidas com o histórico do mês anterior
# (SimpliRoute::PlanilhaCarga). Somente leitura das bases.
class Admin::PlanilhasSimpliRouteController < ApplicationController
  XLSX_MIME = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'.freeze

  def show
    authorize :planilha_simpli_route
    @operacoes_agrupadas = Operacao.agrupadas_por_mes
  end

  # GET /admin/planilha_simpli_route/baixar?tabela=gade_entregas_...
  def baixar
    authorize :planilha_simpli_route

    tabela = params[:tabela].to_s
    unless Operacao.valida?(tabela)
      return redirect_to(admin_planilha_simpli_route_path, alert: 'Selecione uma operação válida.')
    end

    carga  = SimpliRoute::PlanilhaCarga.new(tabela)
    linhas = carga.linhas

    if linhas.empty?
      return redirect_to(admin_planilha_simpli_route_path,
                         alert: "A operação #{carga.label} não tem registros.")
    end

    binario = SimpliRoute::PlanilhaCargaXlsx.new(linhas).gerar
    send_data binario,
              filename: "carga_simpliroute_#{nome_arquivo(carga.label)}.xlsx",
              type: XLSX_MIME,
              disposition: 'attachment'
  end

  private

  def nome_arquivo(label)
    label.to_s.parameterize(separator: '_').presence || 'operacao'
  end
end
