/*
 *
 *    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>

/**
 * @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
};
