// Copyright 2018 The Fuchsia 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 "peridot/bin/sessionmgr/storage/story_storage_xdr.h"
#include "peridot/lib/module_manifest/module_manifest_xdr.h"

#include <lib/fidl/cpp/clone.h>
#include <lib/fsl/vmo/strings.h>

namespace modular {

void XdrLinkPath(XdrContext* const xdr,
                 fuchsia::modular::LinkPath* const data) {
  xdr->Field("module_path", &data->module_path);
  xdr->Field("link_name", &data->link_name);
}

void XdrModuleParameterMapEntry(
    XdrContext* const xdr,
    fuchsia::modular::ModuleParameterMapEntry* const data) {
  // NOTE: the JSON field naming doesn't match the FIDL struct naming because
  // the field names in FIDL were changed.
  xdr->Field("key", &data->name);
  xdr->Field("link_path", &data->link_path, XdrLinkPath);
}

void XdrModuleParameterMap(XdrContext* const xdr,
                           fuchsia::modular::ModuleParameterMap* const data) {
  // NOTE: the JSON field naming doesn't match the FIDL struct naming because
  // the field names in FIDL were changed.
  xdr->Field("key_to_link_map", &data->entries, XdrModuleParameterMapEntry);
}

void XdrSurfaceRelation(XdrContext* const xdr,
                        fuchsia::modular::SurfaceRelation* const data) {
  xdr->Field("arrangement", &data->arrangement);
  xdr->Field("dependency", &data->dependency);
  xdr->Field("emphasis", &data->emphasis);
}

void XdrIntentParameterData(XdrContext* const xdr,
                            fuchsia::modular::IntentParameterData* const data) {
  static constexpr char kTag[] = "tag";
  static constexpr char kEntityReference[] = "entity_reference";
  static constexpr char kJson[] = "json";
  static constexpr char kEntityType[] = "entity_type";

  switch (xdr->op()) {
    case XdrOp::FROM_JSON: {
      std::string tag;
      xdr->Field(kTag, &tag);

      if (tag == kEntityReference) {
        fidl::StringPtr value;
        xdr->Field(kEntityReference, &value);
        data->set_entity_reference(std::move(value));
      } else if (tag == kJson) {
        fidl::StringPtr value;
        xdr->Field(kJson, &value);
        fsl::SizedVmo vmo;
        FXL_CHECK(fsl::VmoFromString(*value, &vmo));
        data->set_json(std::move(vmo).ToTransport());
      } else if (tag == kEntityType) {
        ::std::vector<::std::string> value;
        xdr->Field(kEntityType, &value);
        data->set_entity_type(std::move(value));
      } else {
        FXL_LOG(ERROR) << "XdrIntentParameterData FROM_JSON unknown tag: "
                       << tag;
      }
      break;
    }

    case XdrOp::TO_JSON: {
      std::string tag;

      switch (data->Which()) {
        case fuchsia::modular::IntentParameterData::Tag::kEntityReference: {
          tag = kEntityReference;
          fidl::StringPtr value = data->entity_reference();
          xdr->Field(kEntityReference, &value);
          break;
        }
        case fuchsia::modular::IntentParameterData::Tag::kJson: {
          tag = kJson;
          std::string json_string;
          FXL_CHECK(fsl::StringFromVmo(data->json(), &json_string));
          fidl::StringPtr value = json_string;
          xdr->Field(kJson, &value);
          break;
        }
        case fuchsia::modular::IntentParameterData::Tag::kEntityType: {
          tag = kEntityType;
          std::vector<std::string> value = data->entity_type();
          xdr->Field(kEntityType, &value);
          break;
        }
        case fuchsia::modular::IntentParameterData::Tag::Invalid:
          FXL_LOG(ERROR) << "XdrIntentParameterData TO_JSON unknown tag: "
                         << static_cast<int>(data->Which());
          break;
      }

      xdr->Field(kTag, &tag);
      break;
    }
  }
}

void XdrIntentParameter(XdrContext* const xdr,
                        fuchsia::modular::IntentParameter* const data) {
  xdr->Field("name", &data->name);
  xdr->Field("data", &data->data, XdrIntentParameterData);
}

void XdrIntent(XdrContext* const xdr, fuchsia::modular::Intent* const data) {
  xdr->Field("action_name", &data->action);
  xdr->Field("action_handler", &data->handler);
  xdr->Field("parameters", &data->parameters, XdrIntentParameter);
}

void XdrModuleData_v1(XdrContext* const xdr,
                      fuchsia::modular::ModuleData* const data) {
  xdr->Field("url", &data->module_url);
  xdr->Field("module_path", &data->module_path);
  xdr->Field("module_source", &data->module_source);
  xdr->Field("surface_relation", &data->surface_relation, XdrSurfaceRelation);
  xdr->Field("module_stopped", &data->module_deleted);
  xdr->Field("intent", &data->intent, XdrIntent);

  // In previous versions we did not have these fields.
  data->parameter_map.entries.resize(0);
}

void XdrModuleData_v2(XdrContext* const xdr,
                      fuchsia::modular::ModuleData* const data) {
  xdr->Field("url", &data->module_url);
  xdr->Field("module_path", &data->module_path);
  xdr->Field("module_source", &data->module_source);
  xdr->Field("surface_relation", &data->surface_relation, XdrSurfaceRelation);
  xdr->Field("module_stopped", &data->module_deleted);
  xdr->Field("intent", &data->intent, XdrIntent);
  // NOTE: the JSON field naming doesn't match the FIDL struct naming because
  // the field name in FIDL was changed.
  xdr->Field("chain_data", &data->parameter_map, XdrModuleParameterMap);
}

void XdrModuleData_v3(XdrContext* const xdr,
                      fuchsia::modular::ModuleData* const data) {
  xdr->Field("url", &data->module_url);
  xdr->Field("module_path", &data->module_path);
  xdr->Field("module_source", &data->module_source);
  xdr->Field("surface_relation", &data->surface_relation, XdrSurfaceRelation);
  xdr->Field("module_stopped", &data->module_deleted);
  xdr->Field("intent", &data->intent, XdrIntent);
  // NOTE: the JSON field naming doesn't match the FIDL struct naming because
  // the field name in FIDL was changed.
  xdr->Field("chain_data", &data->parameter_map, XdrModuleParameterMap);
}

void XdrModuleData_v4(XdrContext* const xdr,
                      fuchsia::modular::ModuleData* const data) {
  if (!xdr->Version(4)) {
    return;
  }
  xdr->Field("url", &data->module_url);
  xdr->Field("module_path", &data->module_path);
  xdr->Field("module_source", &data->module_source);
  xdr->Field("surface_relation", &data->surface_relation, XdrSurfaceRelation);
  xdr->Field("module_stopped", &data->module_deleted);
  xdr->Field("intent", &data->intent, XdrIntent);
  // NOTE: the JSON field naming doesn't match the FIDL struct naming because
  // the field name in FIDL was changed.
  xdr->Field("chain_data", &data->parameter_map, XdrModuleParameterMap);
}

void XdrModuleData_v5(XdrContext* const xdr,
                      fuchsia::modular::ModuleData* const data) {
  if (!xdr->Version(5)) {
    return;
  }
  xdr->Field("url", &data->module_url);
  xdr->Field("module_path", &data->module_path);
  xdr->Field("module_source", &data->module_source);
  xdr->Field("surface_relation", &data->surface_relation, XdrSurfaceRelation);
  xdr->Field("module_deleted", &data->module_deleted);
  xdr->Field("intent", &data->intent, XdrIntent);
  // NOTE: the JSON field naming doesn't match the FIDL struct naming because
  // the field name in FIDL was changed.
  xdr->Field("chain_data", &data->parameter_map, XdrModuleParameterMap);
}

void XdrModuleData_v6(XdrContext* const xdr,
                      fuchsia::modular::ModuleData* const data) {
  if (!xdr->Version(6)) {
    return;
  }
  xdr->Field("url", &data->module_url);
  xdr->Field("module_path", &data->module_path);
  xdr->Field("module_source", &data->module_source);
  xdr->Field("surface_relation", &data->surface_relation, XdrSurfaceRelation);
  xdr->Field("module_deleted", &data->module_deleted);
  xdr->Field("intent", &data->intent, XdrIntent);
  // NOTE: the JSON field naming doesn't match the FIDL struct naming because
  // the field name in FIDL was changed.
  xdr->Field("chain_data", &data->parameter_map, XdrModuleParameterMap);
  xdr->Field("is_embedded", &data->is_embedded);
}

XdrFilterType<fuchsia::modular::ModuleData> XdrModuleData[] = {
    XdrModuleData_v6, XdrModuleData_v5, XdrModuleData_v4, XdrModuleData_v3,
    XdrModuleData_v2, XdrModuleData_v1, nullptr,
};

}  // namespace modular
