# config/routes.rb
Rails.application.routes.draw do
  # Devise — login padrão para admin/gerente/operador
  devise_for :users, path: 'auth',
    controllers: { sessions: 'users/sessions' },
    path_names: {
    sign_in:  'login',
    sign_out: 'logout',
    password: 'senha'
  }

  # Root — redireciona por role
  root 'dashboard#index'

  # Dashboard principal (admin/gerente/operador)
  get '/dashboard', to: 'dashboard#index', as: :dashboard
  get '/dashboard/relatorio_financeiro', to: 'dashboard#relatorio_financeiro', as: :dashboard_relatorio_financeiro

  # Dashboard de análise de entregas por operação (UBS Norte, EMAD, ...)
  get '/dashboard/operacoes', to: 'operacoes_dashboard#index', as: :operacoes_dashboard
  # Planilha da operação (tabela espelho pesquisável, página própria)
  get '/dashboard/operacoes/planilha', to: 'operacoes_dashboard#planilha', as: :operacoes_planilha
  # Download .xlsx da planilha Entregas preenchida (modelo entregue ao cliente)
  get '/dashboard/operacoes/planilha/baixar', to: 'operacoes_dashboard#baixar_planilha', as: :operacoes_planilha_baixar

  # Painel motorista
  get '/motorista', to: 'motorista/dashboard#index', as: :motorista_dashboard

  # Login motorista — PIN de 4 dígitos + acesso via QR Code do extrato
  get  '/motorista/login',         to: 'motorista/sessoes#new',       as: :motorista_login
  post '/motorista/login',         to: 'motorista/sessoes#create'
  get  '/motorista/acesso/:token', to: 'motorista/sessoes#acesso_qr', as: :motorista_acesso_qr

  # Consolidações
  resources :consolidacoes do
    collection do
      get :veiculos_disponiveis   # JSON — veículos do(s) motorista(s) no período (form nova consolidação)
      get :operacoes_disponiveis  # JSON — tabelas de operação (gade_entregas_*)
      get :dados_da_operacao      # JSON — motoristas/veículos/período da(s) operação(ões)
      get  :buscar_nf             # JSON — busca a NF na rastreio (nota avulsa)
      post :avulsa                # cria consolidação avulsa a partir de uma NF
      get :arquivadas             # Histórico — consolidações arquivadas
    end

    member do
      get  :wizard            # Passo 1 — selecionar motorista
      post :finalizar
      post :finalizar_parcial     # arquiva veículos pendentes e finaliza (só os consolidados)
      post :arquivar
      post :reativar              # Restaura uma consolidação arquivada
      post :registrar_pagamento  # Marca 1 motorista (ou todos) como pago
      post :cancelar_pagamento   # Estorna o pagamento de 1 motorista (ou todos)
      post :arquivar_motorista   # Arquiva 1 motorista da consolidação (reversível)
      post :desarquivar_motorista # Restaura um motorista arquivado
      delete :excluir_motorista   # Exclui de vez 1 motorista (admin/gerente)
      post :adicionar_motorista   # Adiciona/restaura 1 motorista nesta consolidação
      get  :preview_extrato
      get  :gerar_pdf_relatorio
      get  :gerar_pdf_extrato
      get  :gerar_pdf_financeiro  # relatório financeiro da consolidação
    end

    resources :consolidacao_entregas, only: [] do
      collection do
        get  :validar               # Passo 2 — toggles de classificação
        post :classificar           # toggle individual (JSON)
        post :classificar_em_massa  # ações em massa (JSON)
        get  :revisar               # Passo 3 — revisão do motorista
        post :fechar_veiculo        # consolida (fecha) um veículo do motorista
        post :reabrir_veiculo       # reabre um veículo já consolidado
        post :arquivar_veiculo      # tira um veículo do gate (reversível)
        post :desarquivar_veiculo   # restaura um veículo arquivado
        get    :buscar_nf            # JSON — busca a NF na SimpleRoute (apontamento manual)
        post   :apontar             # cria apontamento manual a partir da NF
        post   :apontar_manual      # apontamento 100% manual (sem rastreio)
        post   :apontar_termo       # lança N entregas de termo (sem NF/código)
        delete :remover_apontamento # remove um apontamento manual (por id)
      end
    end
  end

  # Configurações (apenas admin/gerente)
  namespace :admin do
    resources :usuarios, except: [:show] do
      member { patch :toggle_ativo }
    end
    resources :configuracoes, only: [:index, :edit, :update] do
      collection { post :toggle_tema }
    end
    resources :auditoria_logs, only: [:index]

    # SMTP e WhatsApp (Twilio) gravados no banco — só admin.
    # Sem rotas `testar_*`: os botões de teste são submits do próprio form
    # (params[:acao]), para o teste usar exatamente o que está na tela.
    resource :configuracao_notificacao, only: [:show, :update],
             controller: 'configuracao_notificacoes'

    # Edição de lançamento do SimpliRoute (correção de status/motivo/comentário)
    # — só admin. Grava direto na API do SimpliRoute + AuditoriaLog.
    resource :edicao_lancamento, only: [:show], controller: 'edicao_lancamentos' do
      get   :buscar      # NF -> lançamentos daquela NF (JSON; pode haver + de um)
      get   :carregar    # visit_id -> card de um lançamento escolhido (JSON)
      patch :atualizar   # aplica a alteração na API
      get   :historico   # histórico da visita na API (JSON, best-effort)
    end

    # Geração da planilha de carga do SimpliRoute (download .xlsx a partir de uma
    # operação vigente + lat/long do mês anterior).
    resource :planilha_simpli_route, only: [:show], controller: 'planilhas_simpli_route' do
      get :baixar
    end
  end

  # API interna — Dashboard métricas
  namespace :api do
    namespace :v1 do
      get 'dashboard/metricas', to: 'dashboard#metricas'
    end
  end

  # Health check (Docker)
  get '/health', to: proc { [200, {}, ['OK']] }
end
