#-------------------------------------------------------------------------
# # Copyright (c) Microsoft and contributors. All rights reserved.
#
# The MIT License(MIT)

# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files(the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions :

# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.

# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#--------------------------------------------------------------------------
class NameGenerator
  def initialize(&cleanup_proc)
    @cleanup_proc = cleanup_proc
    @names = []
  end

  def name
    alpha = ("a".."z").to_a
    name = 10.times.map { alpha[Random.rand(alpha.size)] }.join
    @names << name
    name
  end

  def clean
    @names.reject! do |name|
      @cleanup_proc.call(name)
    end
    @names = []
  end
end

TableNameHelper = NameGenerator.new do |name|
  svc = Azure::Storage::Table::TableService.new
  begin
    svc.delete_table name
  rescue
  end
end

ContainerNameHelper = NameGenerator.new do |name|
  svc = Azure::Storage::Blob::BlobService.new
  begin
    svc.delete_container name
  rescue
  end
end

BlobNameHelper = NameGenerator.new do
end

QueueNameHelper = NameGenerator.new do |name|
  svc = Azure::Storage::Queue::QueueService.new
  begin
    svc.delete_queue name
  rescue
  end
end

ShareNameHelper = NameGenerator.new do |name|
  svc = Azure::Storage::File::FileService.new
  begin
    svc.delete_share name
  rescue
  end
end

FileNameHelper = NameGenerator.new do
end

ServiceBusRelayNameHelper = NameGenerator.new do |name|
  svc = Azure::ServiceBus::ServiceBusService.new
  begin
    svc.delete_relay name
  rescue
  end
end

ServiceBusQueueNameHelper = NameGenerator.new do |name|
  svc = Azure::ServiceBus::ServiceBusService.new
  begin
    svc.delete_queue name
  rescue
  end
end

ServiceBusTopicNameHelper = NameGenerator.new do |name|
  svc = Azure::ServiceBus::ServiceBusService.new
  begin
    svc.delete_topic name
  rescue
  end
end

AffinityGroupNameHelper = NameGenerator.new do |name|
  svc = Azure::BaseManagementService.new
  begin
    svc.delete_affinity_group name
  rescue
  end
end

class GB18030TestStringsClass
  def get
    {
      "Chinese2B1"       => [0x2488, 0x2460, 0x216B, 0x3128,
                             0x3129].pack("U*"),
      "Chinese2B2"       => [0x554A, 0x963F, 0x9F3E, 0x9F44].pack("U*"),
      "Chinese2B3"       => [0x4E02, 0x4E04, 0x72DA, 0x72DB].pack("U*"),
      "Chinese2B4"       => [0x72DC, 0x72DD, 0xFA28, 0xFA29].pack("U*"),
      "Chinese2B5"       => [0x02CA, 0x02CB, 0x02D9, 0x2013,
                             0xE7F3, 0x3007].pack("U*"),
      "Chinese4BExtA"    => [0x3400, 0x3401, 0x4DB4, 0x4DB5].pack("U*"),
      "ChineseExtB"      => [0x020000, 0x020001, 0x02A6D5,
                             0x02A6D6].pack("U*"),
      "Tibetan"          => [0x0F56, 0x0F7C, 0x0F51, 0x0F0B, 0x0F61,
                             0x0F72, 0x0F42, 0x0020, 0x0020, 0x0020,
                             0x0F00, 0x0F01, 0x0F02, 0x0F03, 0x0F04,
                             0x0F05, 0x0FA2, 0x0FA3, 0x0FA4,
                             0x0FA5].pack("U*"),
      "Uyghur"           => [0x0626, 0x06C7, 0x064A, 0x063A,
                             0x06C7, 0x0631, 0x0020, 0x062A,
                             0x0649, 0x0644, 0x0649, 0x0020,
                             0x0020, 0x0020, 0x003B, 0x060B,
                             0x0020, 0x060C, 0x0020, 0x060D,
                             0x0020, 0x060E, 0x0020, 0x060F,
                             0x0610, 0x0020, 0x0020, 0x0020,
                             0xFEF2, 0x0020, 0xFEF3, 0x0020,
                             0xFEF4, 0x0020, 0xFEF5, 0x0020,
                             0xFEF6, 0x0020, 0xFEF7, 0x0020,
                             0xFEF8, 0x0020, 0xFEF9, 0x0020,
                             0xFEFA, 0x0020, 0xFEFB].pack("U*"),
      "Mongolian"        => [0x182E, 0x1823, 0x1829, 0x182D,
                             0x1823, 0x182F, 0x0020, 0x0020,
                             0x1826, 0x1830, 0x1826, 0x182D,
                             0x003B, 0x0020, 0x17F8, 0x17F9,
                             0x0020, 0x188E, 0x188F, 0x1890,
                             0x1891, 0x1892, 0x1893, 0x1894,
                             0x1895, 0x1896, 0x1897].pack("U*"),
      "Yi"               => [0xA188, 0xA320, 0xA071, 0xA0B7,
                             0x003B, 0xA000, 0xA001, 0xA002,
                             0xA003, 0xA004, 0xA005, 0xA006,
                             0xA4C1, 0xA4C2, 0xA4C3, 0xA4C4,
                             0xA4C5, 0xA4C6].pack("U*"),
      "DehongDai"        => [0x1958, 0x1963, 0x196D, 0x1970,
                             0x0020, 0x1956, 0x196D, 0x1970,
                             0x0020, 0x1956, 0x196C, 0x1972,
                             0x1951, 0x1968, 0x1952, 0x1970].pack("U*"),
      "XishuangbannaDai" => [0x198E, 0x19B7, 0x1991, 0x19BA,
                             0x1996, 0x19BA, 0x19C8, 0x1989,
                             0x19B2, 0x19C7, 0x1989, 0x19B8,
                             0x19C2, 0x1997, 0x19C3, 0x1993, 0x19B1].pack("U*")
    }
  end

  def get_xml_10_fourth_ed_identifiers
    # No characters from the following sets are valid,
    # according to the XML library that the service uses:
    #   * Chinese_4B_ExtA
    #   * Chinese_ExtB
    #   * Mongolian
    #   * Yi
    #   * Dehong_Dai
    #   * Xishuangbanna_Dai
    {
      "Chinese_2B1" => [0x3128, 0x3129].pack("U*"),
      "Chinese_2B2" => [0x554A, 0x963F, 0x9F3E, 0x9F44].pack("U*"),
      "Chinese_2B3" => [0x4E02, 0x4E04, 0x72DA, 0x72DB].pack("U*"),
      "Chinese_2B4" => [0x72DC, 0x72DD].pack("U*"),
      "Chinese_2B5" => [0x3007].pack("U*"),
      "Tibetan"     => [0x0F56, 0x0F7C, 0x0F51, 0x0F61, 0x0F72, 0x0F42,
                        0x0FA2, 0x0FA3, 0x0FA4, 0x0FA5].pack("U*"),
      "Uyghur"      => [0x0626, 0x06C7, 0x064A, 0x063A, 0x06C7, 0x0631,
                        0x062A, 0x0649, 0x0644, 0x0649].pack("U*"),
    }
  end
end

GB18030TestStrings = GB18030TestStringsClass.new
