require './spec/support/sidekiq'

def create_group_with_parents(user, full_path)
  parent_path = nil
  group = nil

  until full_path.blank?
    path, _, full_path = full_path.partition('/')

    if parent_path
      parent = Group.find_by_full_path(parent_path)

      parent_path += '/'
      parent_path += path

      group = Groups::CreateService.new(user, path: path, parent_id: parent.id).execute
    else
      parent_path = path

      group = Group.find_by_full_path(parent_path) ||
        Groups::CreateService.new(user, path: path).execute
    end
  end

  group
end

Sidekiq::Testing.inline! do
  Gitlab::Seeder.quiet do
    project_urls = [
     'https://android.googlesource.com/platform/hardware/broadcom/libbt.git',
     'https://android.googlesource.com/platform/hardware/broadcom/wlan.git',
     'https://android.googlesource.com/platform/hardware/bsp/bootloader/intel/edison-u-boot.git',
     'https://android.googlesource.com/platform/hardware/bsp/broadcom.git',
     'https://android.googlesource.com/platform/hardware/bsp/freescale.git',
     'https://android.googlesource.com/platform/hardware/bsp/imagination.git',
     'https://android.googlesource.com/platform/hardware/bsp/intel.git',
     'https://android.googlesource.com/platform/hardware/bsp/kernel/common/v4.1.git',
     'https://android.googlesource.com/platform/hardware/bsp/kernel/common/v4.4.git'
    ]

    user = User.admins.first

    project_urls.each_with_index do |url, i|
      full_path = url.sub('https://android.googlesource.com/', '')
      full_path = full_path.sub(/\.git\z/, '')
      full_path, _, project_path = full_path.rpartition('/')
      group = Group.find_by_full_path(full_path) || create_group_with_parents(user, full_path)

      params = {
        import_url: url,
        namespace_id: group.id,
        path: project_path,
        name: project_path,
        description: FFaker::Lorem.sentence,
        visibility_level: Gitlab::VisibilityLevel.values.sample
      }

      project = Projects::CreateService.new(user, params).execute
      project.send(:_run_after_commit_queue)

      if project.valid?
        print '.'
      else
        print 'F'
      end
    end
  end
end
