// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "chrome/browser/file_select_helper_contacts_android.h"

#include "base/bind.h"
#include "base/files/file_path.h"
#include "base/files/file_util.h"
#include "base/task/post_task.h"
#include "chrome/browser/profiles/profile.h"
#include "content/public/browser/browser_task_traits.h"
#include "ui/shell_dialogs/selected_file_info.h"

FileSelectHelperContactsAndroid::FileSelectHelperContactsAndroid(
    Profile* profile)
    : FileSelectHelper(profile) {}

void FileSelectHelperContactsAndroid::FileSelectedWithExtraInfo(
    const ui::SelectedFileInfo& file,
    int index,
    void* params) {
  base::PostTaskWithTraits(
      FROM_HERE,
      {base::MayBlock(), base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN},
      base::BindOnce(
          &FileSelectHelperContactsAndroid::ProcessContactsForAndroid, this,
          (char*)params));
}

void FileSelectHelperContactsAndroid::ProcessContactsForAndroid(
    const std::string& contacts) {
  base::FilePath temp_file;
  if (base::CreateTemporaryFile(&temp_file)) {
    bool success =
        WriteFile(temp_file, contacts.c_str(), contacts.length()) > 0;
    temporary_files_.push_back(temp_file);
    if (!success)
      temp_file = base::FilePath();
  }

  base::PostTaskWithTraits(
      FROM_HERE, {content::BrowserThread::UI},
      base::BindOnce(
          &FileSelectHelperContactsAndroid::ProcessContactsForAndroidOnUIThread,
          this, temp_file));
}

void FileSelectHelperContactsAndroid::ProcessContactsForAndroidOnUIThread(
    const base::FilePath& temp_file) {
  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);

  std::vector<ui::SelectedFileInfo> files;

  if (temp_file.empty()) {
    NotifyRenderFrameHostAndEnd(files);
    return;
  }

  ui::SelectedFileInfo file_info;
  file_info.local_path = temp_file;
  file_info.display_name = "contacts.json";
  files.push_back(file_info);

  // Typically, |temporary_files| are deleted after |web_contents_| is
  // destroyed. If |web_contents_| is already NULL, then the temporary files
  // need to be deleted now.
  if (!web_contents_) {
    DeleteTemporaryFiles();
    RunFileChooserEnd();
    return;
  }

  NotifyRenderFrameHostAndEnd(files);
}
