# frozen_string_literal: true

class GardenCollaboratorsController < ApplicationController
  before_action :authenticate_member!, except: %i(index show)
  before_action :load_garden
  load_and_authorize_resource id_param: :slug

  respond_to :html
  responders :flash

  def index
    @garden_collaborators = @garden.garden_collaborators.paginate(page: params[:page])
    respond_with(@garden_collaborators)
  end

  def show
    @garden_collaborator = GardenCollaborator.find(params[:garden_collaborator_id])

    respond_with(@garden_collaborator)
  end

  def new
    @garden_collaborator = GardenCollaborator.new(garden: @garden)

    authorize! :create, @garden_collaborator

    respond_with(@garden_collaborator)
  end

  def edit
    @garden_collaborator = GardenCollaborator.find(params[:id])

    authorize! :update, @garden_collaborator

    respond_with(@garden_collaborator)
  end

  def create
    @garden_collaborator = GardenCollaborator.new(garden: @garden)
    authorize! :create, @garden_collaborator

    @member = Member.find_by(slug: params[:garden_collaborator][:member_slug])

    @garden_collaborator.member = @member
    if @garden_collaborator.save
      redirect_to garden_garden_collaborators_path(@garden)
    else
      respond_with(@garden_collaborator)
    end
  end

  def update
    @garden_collaborator = GardenCollaborator.find(params[:id])
    authorize! :update, @garden_collaborator

    @member = Member.find_by(slug: params[:garden_collaborator][:member_slug])

    @garden_collaborator.member = @member
    @garden_collaborator.save

    respond_with(@garden_collaborator)
  end

  def destroy
    @garden_collaborator = GardenCollaborator.find(params[:id])

    authorize! :destroy, @garden_collaborator

    if @garden_collaborator.destroy
      redirect_to garden_garden_collaborators_path(@garden)
    else
      respond_with(@garden_collaborator)
    end
  end

  private

  def load_garden
    @garden = Garden.find_by(slug: params[:garden_slug])
  end

  def garden_collaborator_params
    params.require(:garden_collaborator).permit(
      :member_slug
    )
  end
end
