# app/controllers/motorista/dashboard_controller.rb
module Motorista
  class DashboardController < ApplicationController
    before_action :garantir_motorista

    # GET /motorista
    def index
      nome = current_user.nome

      # Card 1 — Valor ESTIMADO (mês atual): entregas ATENDIDAS × preco_entrega.
      #
      # Atendida = o motorista FOI ao local e fechou a visita, com sucesso
      # ('completed') OU insucesso ('failed') — no insucesso o deslocamento
      # aconteceu e teve custo, então a empresa paga os dois. É o MESMO recorte do
      # dashboard administrativo e da consolidação (ver Entrega::STATUS_ATENDIDO e
      # Entrega.contar_atendidas): usava `pagas` (só concluídas) e o motorista via
      # um valor MENOR que o do fechamento, sem entender de onde vinha a diferença.
      #
      # ⚠️ O eixo é o CHECKOUT (data real da visita), não planned_date: falhada TEM
      # checkout, e uma entrega planejada em 31/07 mas fechada em 01/08 pertence a
      # agosto — igual ao que a consolidação considera elegível.
      @estimado_inicio = Date.current.beginning_of_month
      @estimado_fim    = Date.current
      atendidas = Entrega.atendidas.da_conta_gade
                         .do_motorista(nome)
                         .no_periodo_checkout(@estimado_inicio, @estimado_fim)
      @entregas_concluidas = atendidas.concluidas.count
      @entregas_falhadas   = atendidas.falhadas.count
      @entregas_mes        = @entregas_concluidas + @entregas_falhadas
      @valor_estimado      = @entregas_mes * Configuracao.preco_entrega

      # Card 2 — Valor CONSOLIDADO: soma das consolidações finalizadas
      @minhas_consolidacoes = Consolidacao.ativas
                                          .joins(:consolidacao_motoristas)
                                          .where(consolidacao_motoristas: { motorista_nome: nome, arquivado_em: nil })
                                          .recentes
                                          .distinct

      @valor_consolidado = ConsolidacaoMotorista.ativos
                             .joins(:consolidacao)
                             .where(motorista_nome: nome,
                                    consolidacoes: { status: :finalizada, deleted_at: nil })
                             .sum(:valor_total)

      # Aviso in-app: pagamentos confirmados nos últimos 7 dias (notificação na
      # própria página do motorista, além de WhatsApp/email).
      @pagamentos_recentes = ConsolidacaoMotorista
                               .joins(:consolidacao)
                               .where(motorista_nome: nome,
                                      consolidacoes: { status: :finalizada, deleted_at: nil })
                               .where.not(pago_em: nil)
                               .where('pago_em >= ?', 7.days.ago)
                               .order(pago_em: :desc)
                               .includes(:consolidacao)
    end

    private

    def garantir_motorista
      return if current_user.motorista?
      redirect_to dashboard_path, alert: 'Área exclusiva dos motoristas.'
    end
  end
end
