class AssumeUserDetailsController < ApplicationController
  before_action :authenticate_user!
  load_and_authorize_resource :class => AssumeUserDetail
  skip_load_resource :only => [:new, :create, :generate_token, :get_token_details]
  skip_authorize_resource :only => [:assume_user, :get_token_details, :sessions_list]
  
  def index
    @active_tokens_list,@expired_tokens_list = [],[]
    current_user.assume_user_details.each do |assume_user_detail|
      if check_token_validity(assume_user_detail)
        @active_tokens_list << assume_user_detail
      else
        @expired_tokens_list << assume_user_detail
      end
    end
  end

  def new
    @assume_user_detail = AssumeUserDetail.new
    @users = current_user.organisation.users.where.not(id: current_user.id).pluck(:id,:email)
  end

  def generate_token
    @assume_user_detail = AssumeUserDetail.new(assume_user_detail_params)
    respond_to do |format|
      if @assume_user_detail.save
        format.html { redirect_to assume_user_details_path, flash: { success:"Assume user token was successfully generated."}}
      else
        format.html { redirect_to new_assume_user_detail_path,flash: { error:"Oops! there was some problem in generating token"}}
      end
    end
  end

  def assume_user
  end

  def get_token_details
  end

  def sessions_list
    @assume_user_detail = AssumeUserDetail.find_by_id(params[:id])
    @sessions = @assume_user_detail.try(:sessions) || []
  end

  def verify_token_details
    @assume_user_detail = AssumeUserDetail.where(token: params[:token]).first
    respond_to do |format|
      if !@assume_user_detail.try(:user).eql?(current_user) && check_token_validity(@assume_user_detail)
        format.html { redirect_to assume_user_path(id: @assume_user_detail.user.id,token: @assume_user_detail.token ), flash: { success:"Assumed user successfully."}}
      else
        format.html { redirect_to assume_user_assume_user_details_path,flash: { error:"Oops! there was some problem in token,it is expired or invalid"}}
      end
    end
  end

  def expire_token
    @assume_user_detail = AssumeUserDetail.find_by_id(params[:id])

    if @assume_user_detail.update(status: false)
      flash[:success] = "Token Expired Successfully"
    else
      flash[:error] = "Oops! Problem in Token Expire"
    end

    redirect_to assume_user_details_path
  end

  def destroy
    @assume_user_detail = AssumeUserDetail.find_by_id(params[:id])

    if @assume_user_detail.destroy
      flash[:success] = "Token deleted Successfully"
    else
      flash[:error] = "Oops! Problem in Token delete"
    end
    redirect_to assume_user_details_path
  end

  private
  def assume_user_detail_params
    params.require(:assume_user_detail).permit(:token_validity).merge(user_id: current_user.id)
  end
  
end
