# typed: false
# frozen_string_literal: true

module BodyParameter
  module YettoParameters
    extend T::Sig

    sig { returns(String) }
    def bparam_organization_id
      plug_installation_params[:organization][:id]
    end

    sig { returns(String) }
    def bparam_inbox_id
      plug_installation_params[:inbox][:id]
    end

    sig { returns(String) }
    def bparam_plug_installation_id
      plug_installation_params[:plug_installation][:id]
    end

    sig { returns(String) }
    def bparam_plug_id
      plug_installation_params[:plug][:id]
    end

    sig { returns(T::Hash[Symbol, String]) }
    def bparam_plug_installation_settings
      plug_installation_params[:plug_installation][:settings]
    end

    sig { returns(T::Hash[Symbol, String]) }
    def plug_installation_params
      return {} if params.blank?

      plug_installation = params.fetch(:plug_installation, {})
      plug_installation_id = plug_installation.fetch(:id, "")
      settings = plug_installation.fetch(:settings, {}).to_unsafe_hash

      organization_id = params.fetch(:organization, {}).fetch(:id, "")
      plug_id = params.fetch(:plug, {}).fetch(:id, "")
      inbox_id = params.fetch(:inbox, {}).fetch(:id, "")

      {
        plug_installation: {
          id: plug_installation_id,
          settings: settings,
        },
        organization: {
          id: organization_id,
        },
        plug: {
          id: plug_id,
        },
        inbox: {
          id: inbox_id,
        },
      }
    end

    sig { returns(String) }
    def bparam_message_id
      message_params[:message][:id]
    end

    sig { returns(String) }
    def bparam_message_text_content
      message_params[:message][:text_content]
    end

    sig { returns(String) }
    def bparam_message_conversation_id
      message_params[:message][:conversation][:id]
    end

    sig { returns(String) }
    def bparam_message_conversation_title
      message_params[:message][:conversation][:title]
    end

    sig { returns(String) }
    def bparam_message_author_name
      message_params[:message].fetch(:author, {}).fetch(:name, "Noone")
    end

    sig { returns(T::Hash[Symbol, String]) }
    def bparam_message_metadata
      message_params[:message][:metadata]
    end

    sig { returns(T::Hash[Symbol, String]) }
    def message_params
      return {} if params.blank?

      message = params.fetch(:message, {})
      message_id = message.fetch(:id, "")
      text_content = message.fetch(:text_content, "")
      conversation = message.fetch(:conversation, {})
      conversation_id = conversation.fetch(:id, "")
      title = conversation.fetch(:title, "")
      created_by_user = message.fetch(:created_by_user, {})
      created_by_plug = message.fetch(:created_by_plug, {})
      author = created_by_user.presence || created_by_plug
      name = author.fetch(:name, "")
      metadata = message.fetch(:metadata, {}).to_unsafe_hash

      {
        message: {
          id: message_id,
          text_content: text_content,
          conversation: {
            id: conversation_id,
            title: title,
          },
          author: {
            name: name,
          },
          metadata: metadata,
        },
      }
    end
  end
end