require "twitter/arguments"
require "twitter/rest/upload_utils"
require "twitter/rest/utils"
require "twitter/utils"

module Twitter
  module REST
    module DirectMessages
      module WelcomeMessages
        include Twitter::REST::UploadUtils
        include Twitter::REST::Utils
        include Twitter::Utils

        # Welcome Message

        def create_welcome_message(text, name = nil, options = {})
          json_options = {
            welcome_message: {
              message_data: {
                text:,
              },
            },
          }
          json_options[:welcome_message][:name] = name if name
          welcome_message_wrapper = perform_request_with_object(:json_post, "/1.1/direct_messages/welcome_messages/new.json", json_options.merge!(options), Twitter::DirectMessages::WelcomeMessageWrapper)
          welcome_message_wrapper.welcome_message
        end

        def destroy_welcome_message(*ids)
          perform_requests(:delete, "/1.1/direct_messages/welcome_messages/destroy.json", ids)
        end

        def update_welcome_message(welcome_message_id, text, options = {})
          params = {
            id: welcome_message_id,
          }
          json_options = {
            message_data: {
              text:,
            },
          }
          welcome_message_wrapper = perform_request_with_object(:json_put, "/1.1/direct_messages/welcome_messages/update.json", json_options.merge!(options), Twitter::DirectMessages::WelcomeMessageWrapper, params)
          welcome_message_wrapper.welcome_message
        end

        def welcome_message(id, options = {})
          options = options.dup
          options[:id] = id
          welcome_message_wrapper = perform_get_with_object("/1.1/direct_messages/welcome_messages/show.json", options, Twitter::DirectMessages::WelcomeMessageWrapper)
          welcome_message_wrapper.welcome_message
        end

        def welcome_message_list(options = {})
          limit = options.fetch(:count, 20)
          welcome_message_wrappers = perform_get_with_cursor("/1.1/direct_messages/welcome_messages/list.json", options.merge!(no_default_cursor: true, count: 50, limit:), :welcome_messages, Twitter::DirectMessages::WelcomeMessageWrapper)
          welcome_message_wrappers.collect(&:welcome_message)
        end

        # Welcome Message Rule

        def create_welcome_message_rule(welcome_message_id, options = {})
          json_options = {
            welcome_message_rule: {
              welcome_message_id:,
            },
          }
          rule_wrapper = perform_request_with_object(:json_post, "/1.1/direct_messages/welcome_messages/rules/new.json", json_options.merge!(options), Twitter::DirectMessages::WelcomeMessageRuleWrapper)
          rule_wrapper.welcome_message_rule
        end

        def destroy_welcome_message_rule(*ids)
          perform_requests(:delete, "/1.1/direct_messages/welcome_messages/rules/destroy.json", ids)
        end

        def welcome_message_rule(id, options = {})
          options = options.dup
          options[:id] = id
          rule_wrapper = perform_get_with_object("/1.1/direct_messages/welcome_messages/rules/show.json", options, Twitter::DirectMessages::WelcomeMessageRuleWrapper)
          rule_wrapper.welcome_message_rule
        end

        def welcome_message_rule_list(options = {})
          limit = options.fetch(:count, 20)
          rule_wrappers = perform_get_with_cursor("/1.1/direct_messages/welcome_messages/rules/list.json", options.merge!(no_default_cursor: true, count: 50, limit:), :welcome_message_rules, Twitter::DirectMessages::WelcomeMessageRuleWrapper)
          rule_wrappers.collect(&:welcome_message_rule)
        end
      end
    end
  end
end
