class NtpServersController < ApplicationController
  before_action :authenticate_user!
  before_action :check_network_presence?, only: [:index, :show, :create, :update, :destroy], if: Proc.new { |c| c.request.format.json? }
  before_action :dashboard_topbar, if: Proc.new { |c| !c.request.format.json? }
  load_resource :class => NtpServer, :except => [:change_network, :create]
  authorize_resource :class => NtpServer, :except => [:change_network]

  def index
    unless @current_network.blank?
      @ntp_server = @current_network.ntp_server
      if request.format.json?
        if @ntp_server.present?
          render json: {data: {ntp_configuration: @ntp_server.try(:json_build)}, status: 200}, status: 200
        else
          render json: {message: "NTP Configuration not found for the requested network. Please configure and try again.", status: 404}, status: 404
        end
      else
        @ntp_server ||= NtpServer.new(:is_enabled => true)
        render :index
      end
    end
  end

  def new
    @ntp_server = @current_network.ntp_server.new
  end

  def edit
    @ntp_server = @current_network.ntp_server
  end

  def create
    if @current_network.ntp_server.present?
      if request.format.json?
        render json: {message: "NTP Server is already present for the requested network. Please check it.", status: 422}, status: 422
      else
        redirect_to ntp_servers_path
      end
    else
      @ntp_server = @current_network.build_ntp_server(ntp_server_params)
      @ntp_server.location_network_id = @current_network.id
      if @ntp_server.save
        if request.format.json?
          render json: {data: {ntp_configuration: @ntp_server.json_build}, status: 200}, status: 200
        else
          flash[:success] = "Your NTP configuration is created Successfully."
          redirect_to ntp_servers_path
        end
      else
        Rails.logger.warn "#{@ntp_server.errors.full_messages}"
        if request.format.json?
          render json: {message: "NTP Configuration is not created (Reason: #{@ntp_server.errors.full_messages}).", status: 422}, status: 422
        else
          flash.now[:error] = "Oops! there was some problem in saving NTP configuration"
          render :new
        end
      end
    end
  end

  def update
    @ntp_server = @current_network.ntp_server
    if @ntp_server.blank? || (params[:id] && @ntp_server.id != params[:id].to_i)
      if request.format.json?
        render json: {message: "NTP Configuration is not confgiured for requested network. Please configure it.", status: 422}, status: 422
      else
        flash[:notice] = "Your Current network has been changed to #{@current_network.network_name}. Please try again!."
        redirect_to :action => 'change_network',:id => @current_network.id
      end
    else
      if @ntp_server.update_attributes(ntp_server_params)
        if request.format.json?
          render json: {data: {ntp_configuration: @ntp_server.json_build}, status: 200}, status: 200
        else
          flash[:success] = "Your NTP servers is updated Successfully."
          redirect_to ntp_servers_path
        end
      else
        if request.format.json?
          render json: {message: "NTP Configuration is not updated (Reason: #{@ntp_server.errors.full_messages}). Please try again.", status: 422}, status: 422
        else
          flash.now[:error] = "Oops! there was some problem in updating NTP servers"
          Rails.logger.warn "#{@ntp_server.errors.full_messages}"
          render :edit
        end
      end
    end
  end

  def destroy
    ntp_server =  @current_network.ntp_server
    if ntp_server.destroy
      if request.format.json?
        render json: {data: {}, status: 200}, status: 200
      else
        flash[:success] = "Your NTP configuration is deleted Successfully."
        redirect_to ntp_servers_path
      end
    else
      if request.format.json?
        render json: {message: "NTP Configuration is not deleted. Please try again.", status: 422}, status: 422
      else
        flash[:error] = "Oops! there was some problem in deleting NTP configuration"
        Rails.logger.warn "#{ntp_server.errors.full_messages}"
      end
    end
  end

  def change_network
    network = current_user.location_networks.find_by_id(params[:id])
    unless network.present?
    network = current_user.location_networks.first
    flash[:notice] = "Your network has been changed to #{network.network_name}"
    end
    current_user.current_network = network.id
    @current_network = current_user.current_network
    logger.info("Current Network in show <<<<<<#{@current_network.id}") unless @current_network.blank?

    redirect_to ntp_servers_path
  end

  private
    # Never trust parameters from the scary internet, only allow the white list through.
    def ntp_server_params
      params.require(:ntp_server).permit(:is_enabled, :urls)
    end
end
