# frozen_string_literal: true

module UploadsHelpers
  def setup_s3
    SiteSetting.enable_s3_uploads = true

    SiteSetting.s3_region = "us-west-1"
    SiteSetting.s3_upload_bucket = "s3-upload-bucket"

    SiteSetting.s3_access_key_id = "some key"
    SiteSetting.s3_secret_access_key = "some secrets3_region key"

    dualstack = SiteSetting.Upload.use_dualstack_endpoint ? ".dualstack" : ""

    stub_request(
      :head,
      "https://#{SiteSetting.s3_upload_bucket}.s3#{dualstack}.#{SiteSetting.s3_region}.amazonaws.com/",
    )
  end

  def enable_secure_uploads
    setup_s3
    SiteSetting.secure_uploads = true
  end

  def stub_upload(upload)
    dualstack = SiteSetting.Upload.use_dualstack_endpoint ? ".dualstack" : ""

    url =
      %r{https://#{SiteSetting.s3_upload_bucket}.s3#{dualstack}.#{SiteSetting.s3_region}.amazonaws.com/original/\d+X.*#{upload.sha1}.#{upload.extension}\?acl}
    stub_request(:put, url)
  end

  def stub_s3_store
    store = FileStore::S3Store.new
    client = Aws::S3::Client.new(stub_responses: true)
    store.s3_helper.stubs(:s3_client).returns(client)
    Discourse.stubs(:store).returns(store)
  end
end