// C++/WinRT v2.0.250303.1

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

#pragma once
#ifndef WINRT_Windows_System_Power_Thermal_2_H
#define WINRT_Windows_System_Power_Thermal_2_H
#include "winrt/impl/Windows.Foundation.2.h"
#include "winrt/impl/Windows.System.Power.Thermal.1.h"
WINRT_EXPORT namespace winrt::Windows::System::Power::Thermal
{
    struct PowerThermalChannelId
    {
        winrt::guid InterfaceType {};
        uint16_t InstanceId {};
    };
    inline bool operator==(PowerThermalChannelId const& left, PowerThermalChannelId const& right) noexcept
    {
        return left.InterfaceType == right.InterfaceType && left.InstanceId == right.InstanceId;
    }
    inline bool operator!=(PowerThermalChannelId const& left, PowerThermalChannelId const& right) noexcept
    {
        return !(left == right);
    }
    struct PowerThermalChannelData
    {
        winrt::Windows::System::Power::Thermal::PowerThermalChannelId Id {};
        int32_t Value {};
    };
    inline bool operator==(PowerThermalChannelData const& left, PowerThermalChannelData const& right) noexcept
    {
        return left.Id == right.Id && left.Value == right.Value;
    }
    inline bool operator!=(PowerThermalChannelData const& left, PowerThermalChannelData const& right) noexcept
    {
        return !(left == right);
    }
    struct WINRT_IMPL_EMPTY_BASES PowerThermalChannelConfiguration : winrt::Windows::System::Power::Thermal::IPowerThermalChannelConfiguration
    {
        PowerThermalChannelConfiguration(std::nullptr_t) noexcept {}
        PowerThermalChannelConfiguration(void* ptr, take_ownership_from_abi_t) noexcept : winrt::Windows::System::Power::Thermal::IPowerThermalChannelConfiguration(ptr, take_ownership_from_abi) {}
    };
    struct WINRT_IMPL_EMPTY_BASES PowerThermalChannelDataConsumer : winrt::Windows::System::Power::Thermal::IPowerThermalChannelDataConsumer,
        impl::require<PowerThermalChannelDataConsumer, winrt::Windows::Foundation::IClosable>
    {
        PowerThermalChannelDataConsumer(std::nullptr_t) noexcept {}
        PowerThermalChannelDataConsumer(void* ptr, take_ownership_from_abi_t) noexcept : winrt::Windows::System::Power::Thermal::IPowerThermalChannelDataConsumer(ptr, take_ownership_from_abi) {}
        explicit PowerThermalChannelDataConsumer(array_view<winrt::Windows::System::Power::Thermal::PowerThermalChannelId const> channelIds);
    };
    struct WINRT_IMPL_EMPTY_BASES PowerThermalChannelDataProducer : winrt::Windows::System::Power::Thermal::IPowerThermalChannelDataProducer,
        impl::require<PowerThermalChannelDataProducer, winrt::Windows::Foundation::IClosable>
    {
        PowerThermalChannelDataProducer(std::nullptr_t) noexcept {}
        PowerThermalChannelDataProducer(void* ptr, take_ownership_from_abi_t) noexcept : winrt::Windows::System::Power::Thermal::IPowerThermalChannelDataProducer(ptr, take_ownership_from_abi) {}
        explicit PowerThermalChannelDataProducer(array_view<winrt::Windows::System::Power::Thermal::PowerThermalChannelId const> channelIds);
    };
    struct WINRT_IMPL_EMPTY_BASES PowerThermalChannelDataReceivedEventArgs : winrt::Windows::System::Power::Thermal::IPowerThermalChannelDataReceivedEventArgs
    {
        PowerThermalChannelDataReceivedEventArgs(std::nullptr_t) noexcept {}
        PowerThermalChannelDataReceivedEventArgs(void* ptr, take_ownership_from_abi_t) noexcept : winrt::Windows::System::Power::Thermal::IPowerThermalChannelDataReceivedEventArgs(ptr, take_ownership_from_abi) {}
    };
    struct WINRT_IMPL_EMPTY_BASES PowerThermalChannelDiagnostics : winrt::Windows::System::Power::Thermal::IPowerThermalChannelDiagnostics
    {
        PowerThermalChannelDiagnostics(std::nullptr_t) noexcept {}
        PowerThermalChannelDiagnostics(void* ptr, take_ownership_from_abi_t) noexcept : winrt::Windows::System::Power::Thermal::IPowerThermalChannelDiagnostics(ptr, take_ownership_from_abi) {}
        [[nodiscard]] static auto Current();
        static auto GetDataForChannels(array_view<winrt::Windows::System::Power::Thermal::PowerThermalChannelId const> channelIds);
    };
    struct PowerThermalChannelFinder
    {
        PowerThermalChannelFinder() = delete;
        static auto FindChannels(winrt::guid const& channelInterfaceType);
    };
}
#endif
