/*
 *
 *    Copyright (c) 2022 Project CHIP Authors
 *    All rights reserved.
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 */

#pragma once

#include <lib/core/Optional.h>
#include <lib/support/Span.h>
#include <setup_payload/CHIPAdditionalDataPayloadBuildConfig.h>

/**
 * @brief Parameters passed to the CastingServer at the time of startup (i.e. init call)
 */
class AppParams
{
public:
    AppParams() {}
#if CHIP_ENABLE_ROTATING_DEVICE_ID
    AppParams(chip::Optional<chip::ByteSpan> rotatingDeviceIdUniqueId);
    void SetRotatingDeviceIdUniqueId(chip::Optional<chip::ByteSpan> rotatingDeviceIdUniqueId);
    chip::Optional<chip::ByteSpan> GetRotatingDeviceIdUniqueId();
#endif // CHIP_ENABLE_ROTATING_DEVICE_ID

private:
#if CHIP_ENABLE_ROTATING_DEVICE_ID
    // if this Optional.hasValue = false, a random one is generated by CastingServer.Init()
    chip::Optional<chip::ByteSpan> mRotatingDeviceIdUniqueId;
#endif // CHIP_ENABLE_ROTATING_DEVICE_ID
};
