# frozen_string_literal: true

class RelationshipsController < ApplicationController
  include TurboStreamable

  before_action :authenticate_user!

  turbo_stream_actions :create, :destroy

  def create
    params.require :screen_name

    UseCase::Relationship::Create.call(
      source_user: current_user,
      target_user: ::User.find_by!(screen_name: params[:screen_name]),
      type:        params[:type],
    )

    respond_to do |format|
      format.turbo_stream do
        render turbo_stream: [
          turbo_stream.replace("#{params[:type]}-#{params[:screen_name]}", partial: "relationships/destroy", locals: { type: params[:type], screen_name: params[:screen_name] }),
          render_toast(t(".#{params[:type]}.success"))
        ]
      end

      format.html { redirect_back(fallback_location: user_path(username: params[:screen_name])) }
    end
  end

  def destroy
    UseCase::Relationship::Destroy.call(
      source_user: current_user,
      target_user: ::User.find_by!(screen_name: params[:screen_name]),
      type:        params[:type],
    )

    respond_to do |format|
      format.turbo_stream do
        render turbo_stream: [
          turbo_stream.replace("#{params[:type]}-#{params[:screen_name]}", partial: "relationships/create", locals: { type: params[:type], screen_name: params[:screen_name] }),
          render_toast(t(".#{params[:type]}.success"))
        ]
      end

      format.html { redirect_back(fallback_location: user_path(username: params[:screen_name])) }
    end
  end
end