// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

#pragma once

#include "MapFeatureDescriptor.g.h"
#include "iengine.h"

namespace WINMLP {
struct MapFeatureDescriptor : MapFeatureDescriptorT<
                                MapFeatureDescriptor,
                                ILearningModelFeatureDescriptorNative,
                                _winml::IDescriptorInfoProvider> {
  MapFeatureDescriptor() = delete;

  MapFeatureDescriptor(
    const char* name,
    const char* description,
    bool is_required,
    winml::TensorKind keyKind,
    winml::ILearningModelFeatureDescriptor valueKind
  );

  // IMapDescriptor
  winml::TensorKind KeyKind();

  winml::ILearningModelFeatureDescriptor ValueDescriptor();

  // IFeatureDescriptor
  hstring Name();

  hstring Description();

  winml::LearningModelFeatureKind Kind();

  bool IsRequired();

  STDMETHOD(GetName)
  (const wchar_t** name, uint32_t* cchName) override;

  STDMETHOD(GetDescription)
  (const wchar_t** description, uint32_t* cchDescription) override;

  STDMETHOD(GetDescriptorInfo)
  (_winml::IEngineFactory* engine_factory, _winml::IDescriptorInfo** info) override;

 private:
  winrt::hstring name_;
  winrt::hstring description_;
  bool is_required_;
  winml::TensorKind key_kind_;
  winml::ILearningModelFeatureDescriptor value_kind_;
};
}  // namespace WINMLP
