# app/controllers/motorista/sessoes_controller.rb
#
# Login do motorista por PIN de 4 dígitos ou por QR Code (token do extrato).
# Não usa Devise password — fluxo simplificado para público de baixo nível técnico.
#
module Motorista
  class SessoesController < ApplicationController
    skip_before_action :authenticate_user!
    layout 'application'

    # GET /motorista/login — tela com teclado de PIN
    # Se veio de um QR Code, o motorista já está pré-identificado (só falta o PIN).
    def new
      @motorista_pre = User.motorista.ativos.find_by(id: session[:motorista_qr_id])
    end

    # POST /motorista/login — valida PIN
    def create
      pin  = params[:pin].to_s.strip
      user = User.motorista.ativos.find_by(pin_code: pin)

      unless pin.length == 4 && user
        @motorista_pre = User.motorista.ativos.find_by(id: session[:motorista_qr_id])
        flash.now[:alert] = 'PIN não encontrado. Confira os 4 números e tente de novo.'
        return render :new, status: :unprocessable_entity
      end

      # Segurança: se o login partiu de um QR Code, o PIN precisa ser do MESMO
      # motorista do QR — impede usar o QR Code de outra pessoa.
      qr_id = session[:motorista_qr_id]
      if qr_id.present? && qr_id != user.id
        @motorista_pre = User.motorista.ativos.find_by(id: qr_id)
        flash.now[:alert] = 'Este PIN não corresponde ao QR Code lido. Use o seu PIN.'
        return render :new, status: :unprocessable_entity
      end

      session.delete(:motorista_qr_id)
      sign_in(user)
      session[:mostrar_splash] = true
      AuditoriaLog.registrar(user: user, acao: :login, entidade: 'User',
                             entidade_id: user.id,
                             dados_novos: (qr_id.present? ? { via: 'qr_code+pin' } : nil),
                             request: request)
      redirect_to motorista_dashboard_path, notice: "Bem-vindo, #{user.nome.split.first}!"
    end

    # GET /motorista/acesso/:token — abre o login a partir do QR Code do extrato.
    # SEGURANÇA: o QR apenas identifica o motorista; ele ainda precisa digitar o
    # PIN de 4 dígitos para entrar (antes o QR logava direto, sem PIN).
    def acesso_qr
      user = User.motorista.ativos.find_by(login_token: params[:token])

      if user
        session[:motorista_qr_id] = user.id
        redirect_to motorista_login_path,
                    notice: "Olá, #{user.nome.split.first}! Digite seu PIN de 4 dígitos para entrar."
      else
        session.delete(:motorista_qr_id)
        redirect_to motorista_login_path, alert: 'QR Code inválido ou expirado. Entre com seu PIN.'
      end
    end
  end
end
