# frozen_string_literal: true

module Admin
  class FriendServersController < BaseController
    before_action :set_friend, except: [:index, :new, :create]
    before_action :warn_signatures_not_enabled!, only: [:new, :edit, :create, :follow, :unfollow, :accept, :reject]

    def index
      authorize :friend_server, :update?
      @friends = FriendDomain.all
    end

    def new
      authorize :friend_server, :update?
      @friend = FriendDomain.new
    end

    def edit
      authorize :friend_server, :update?
    end

    def create
      authorize :friend_server, :update?

      @friend = FriendDomain.new(resource_params)

      if @friend.save
        @friend.follow!
        redirect_to admin_friend_servers_path
      else
        render action: :new
      end
    end

    def update
      authorize :friend_server, :update?

      if @friend.update(update_resource_params)
        redirect_to admin_friend_servers_path
      else
        render action: :edit
      end
    end

    def destroy
      authorize :friend_server, :update?
      @friend.destroy
      redirect_to admin_friend_servers_path
    end

    def follow
      authorize :friend_server, :update?
      @friend.follow!
      render action: :edit
    end

    def unfollow
      authorize :friend_server, :update?
      @friend.unfollow!
      render action: :edit
    end

    def accept
      authorize :friend_server, :update?
      @friend.accept!
      render action: :edit
    end

    def reject
      authorize :friend_server, :update?
      @friend.reject!
      render action: :edit
    end

    private

    def set_friend
      @friend = FriendDomain.find(params[:id])
    end

    def resource_params
      params.require(:friend_domain).permit(:domain, :inbox_url, :available, :pseudo_relay, :delivery_local, :unlocked, :allow_all_posts)
    end

    def update_resource_params
      params.require(:friend_domain).permit(:inbox_url, :available, :pseudo_relay, :delivery_local, :unlocked, :allow_all_posts)
    end

    def warn_signatures_not_enabled!
      flash.now[:error] = I18n.t('admin.relays.signatures_not_enabled') if authorized_fetch_mode?
    end
  end
end