class Verification::SmsController < ApplicationController
  before_action :authenticate_user!
  before_action :verify_resident!
  before_action :verify_verified!
  before_action :verify_lock, only: [:new, :create]
  before_action :set_phone, only: :create

  skip_authorization_check

  def new
    @sms = Verification::Sms.new(phone: params[:phone])
  end

  def create
    @sms = Verification::Sms.new(phone: @phone, user: current_user)
    if @sms.save
      redirect_to edit_sms_path, notice: t('verification.sms.create.flash.success')
    else
      render :new
    end
  end

  def edit
    @sms = Verification::Sms.new
  end

  def update
    @sms = Verification::Sms.new(sms_params.merge(user: current_user))
    if @sms.verified?
      current_user.update(confirmed_phone: current_user.unconfirmed_phone)
      ahoy.track(:level_2_user, user_id: current_user.id) rescue nil

      if VerifiedUser.phone?(current_user)
        current_user.update(verified_at: Time.now)
      end

      redirect_to_next_path
    else
      @error = t('verification.sms.update.error')
      render :edit
    end
  end

  private

    def sms_params
      params.require(:sms).permit(:phone, :confirmation_code)
    end

    def set_phone
      if verified_user
        @phone = @verified_user.phone
      else
        @phone = sms_params[:phone]
      end
    end

    def verified_user
      return false unless params[:verified_user]
      @verified_user = VerifiedUser.by_user(current_user).where(id: params[:verified_user][:id]).first
    end

    def redirect_to_next_path
      current_user.reload
      if current_user.level_three_verified?
        redirect_to account_path, notice: t('verification.sms.update.flash.level_three.success')
      else
        redirect_to new_letter_path, notice: t('verification.sms.update.flash.level_two.success')
      end
    end

end