#ifndef ASH_API_TASKS_FAKE_TASKS_CLIENT_H_
#define ASH_API_TASKS_FAKE_TASKS_CLIENT_H_
#include <list>
#include <string>
#include <vector>
#include "ash/api/tasks/tasks_client.h"
#include "ash/ash_export.h"
#include "base/containers/flat_map.h"
#include "base/functional/callback_forward.h"
#include "base/time/time.h"
#include "google_apis/common/api_error_codes.h"
#include "ui/base/models/list_model.h"
namespace ash::api {
struct Task;
struct TaskList;
class ASH_EXPORT FakeTasksClient : public TasksClient {
public:
FakeTasksClient();
FakeTasksClient(const FakeTasksClient&) = delete;
FakeTasksClient& operator=(const FakeTasksClient&) = delete;
~FakeTasksClient() override;
std::vector<std::string> pending_completed_tasks() const {
return pending_completed_tasks_;
}
int completed_task_count() { return completed_tasks_; }
bool IsDisabledByAdmin() const override;
const ui::ListModel<api::TaskList>* GetCachedTaskLists() override;
void GetTaskLists(bool force_fetch, GetTaskListsCallback callback) override;
const ui::ListModel<api::Task>* GetCachedTasksInTaskList(
const std::string& task_list_id) override;
void GetTasks(const std::string& task_list_id,
bool force_fetch,
GetTasksCallback callback) override;
void MarkAsCompleted(const std::string& task_list_id,
const std::string& task_id,
bool checked) override;
void AddTask(const std::string& task_list_id,
const std::string& title,
TasksClient::OnTaskSavedCallback callback) override;
void UpdateTask(const std::string& task_list_id,
const std::string& task_id,
const std::string& title,
bool completed,
TasksClient::OnTaskSavedCallback callback) override;
void InvalidateCache() override {}
std::optional<base::Time> GetTasksLastUpdateTime(
const std::string& task_list_id) const override;
void OnGlanceablesBubbleClosed(base::OnceClosure callback) override;
void AddTaskList(std::unique_ptr<TaskList> task_list_data);
void AddTask(const std::string& task_list_id,
std::unique_ptr<Task> task_data);
void DeleteTaskList(const std::string& task_list_id);
void SetTasksLastUpdateTime(base::Time time);
int GetAndResetBubbleClosedCount();
size_t RunPendingGetTasksCallbacks();
size_t RunPendingGetTaskListsCallbacks();
size_t RunPendingAddTaskCallbacks();
size_t RunPendingUpdateTaskCallbacks();
void set_is_disabled_by_admin(bool is_disabled_by_admin) {
is_disabled_by_admin_ = is_disabled_by_admin;
}
void set_paused(bool paused) { paused_ = paused; }
void set_paused_on_fetch(bool paused) { paused_on_fetch_ = paused; }
void set_get_task_lists_error(bool error) { get_task_lists_error_ = error; }
void set_get_tasks_error(bool error) { get_tasks_error_ = error; }
void set_http_error(std::optional<google_apis::ApiErrorCode> http_error) {
http_error_ = http_error;
}
ui::ListModel<TaskList>* task_lists() { return task_lists_.get(); }
private:
void AddTaskImpl(const std::string& task_list_id,
const std::string& title,
TasksClient::OnTaskSavedCallback callback);
void UpdateTaskImpl(const std::string& task_list_id,
const std::string& task_id,
const std::string& title,
bool completed,
TasksClient::OnTaskSavedCallback callback);
void CacheTaskLists();
void CacheTasks();
std::unique_ptr<ui::ListModel<TaskList>> task_lists_;
std::unique_ptr<ui::ListModel<TaskList>> cached_task_lists_;
std::unique_ptr<ui::ListModel<Task>> cached_tasks_;
std::string cached_task_list_id_;
std::vector<std::string> pending_completed_tasks_;
base::flat_map<std::string, std::unique_ptr<ui::ListModel<Task>>>
tasks_in_task_lists_;
int bubble_closed_count_ = 0;
int completed_tasks_ = 0;
bool get_task_lists_error_ = false;
bool get_tasks_error_ = false;
std::optional<google_apis::ApiErrorCode> http_error_ = std::nullopt;
base::Time last_updated_time_;
bool is_disabled_by_admin_ = false;
bool paused_ = false;
bool paused_on_fetch_ = false;
std::list<base::OnceClosure> pending_get_tasks_callbacks_;
std::list<base::OnceClosure> pending_get_task_lists_callbacks_;
std::list<base::OnceClosure> pending_add_task_callbacks_;
std::list<base::OnceClosure> pending_update_task_callbacks_;
};
}
#endif