# frozen_string_literal: true

class Ajax::ListController < AjaxController
  before_action :authenticate_user!

  def create
    params.require :name
    params.require :user

    @response[:status] = :err

    target_user = User.find_by!(screen_name: params[:user])
    list = List.create! user: current_user, display_name: params[:name]

    @response[:status] = :okay
    @response[:success] = true
    @response[:message] = t(".success")
    @response[:render] = render_to_string(partial: "modal/list/item", locals: { list: list, user: target_user })
  end

  def destroy
    params.require :list

    @response[:status] = :err

    List.where(user: current_user, name: params[:list]).first.destroy!

    @response[:status] = :okay
    @response[:success] = true
    @response[:message] = t(".success")
  end

  def membership
    params.require :user
    params.require :list
    params.require :add

    @response[:status] = :err

    add = params[:add] == "true"

    target_user = User.find_by!(screen_name: params[:user])
    list = current_user.lists.find_by!(name: params[:list])

    raise Errors::ListingSelfBlockedOther if current_user.blocking?(target_user)
    raise Errors::ListingOtherBlockedSelf if target_user.blocking?(current_user)

    if add
      list.add_member target_user if list.members.find_by(user_id: target_user.id).nil?
      @response[:checked] = true
      @response[:message] = t(".success.add")
    else
      list.remove_member target_user unless list.members.find_by(user_id: target_user.id).nil?
      @response[:checked] = false
      @response[:message] = t(".success.remove")
    end

    @response[:status] = :okay
    @response[:success] = true
  end
end