// Copyright 2019 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.

#ifndef SRC_CAMERA_DRIVERS_CONTROLLER_SHERLOCK_SHERLOCK_PRODUCT_CONFIG_H_
#define SRC_CAMERA_DRIVERS_CONTROLLER_SHERLOCK_SHERLOCK_PRODUCT_CONFIG_H_

#include <vector>

#include "src/camera/drivers/controller/configs/internal_config.h"
#include "src/camera/drivers/controller/configs/product_config.h"

namespace camera {

class SherlockProductConfig : public ProductConfig {
 public:
  // Along with providing the external configuration, we also
  // populate the internal configuration here.
  // NOTE: we need to ensure that we are keeping the order of
  // external and internal configuration same so we can lookup
  // the internal data easily when needed.
  // The demo uses the config and stream indexes to setup a
  // particular stream. These indexes are based on what order
  // we populate the different configurations below.
  // Following is the order of configs and streams for Sherlock.
  // Config 0: Monitoring configuration.
  //          Stream 0: ML | FR
  //          Stream 1: ML | DS
  //          Stream 2: MONITORING
  // Config 1: Video conferencing configuration.
  //          Stream 0: ML | FR | VIDEO
  //          Stream 1: VIDEO
  // Config 2: // Video conferencing configuration with extended FOV enabled.
  //          Stream 0: ML | FR | VIDEO | EXTENDED_FOV
  //          Stream 1: VIDEO | | EXTENDED_FOV
  std::vector<fuchsia::camera2::hal::Config> ExternalConfigs() override;

  // Returns the internal configuration corresponding to the
  // external configuration.
  struct InternalConfigs InternalConfigs() override;

  const char* GetGdcConfigFile(GdcConfig config_type) override;
};

}  // namespace camera

#endif  // SRC_CAMERA_DRIVERS_CONTROLLER_SHERLOCK_SHERLOCK_PRODUCT_CONFIG_H_
