// C++/WinRT v2.0.250303.1

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

#pragma once
#ifndef WINRT_Windows_UI_Shell_CompanionWindows_0_H
#define WINRT_Windows_UI_Shell_CompanionWindows_0_H
WINRT_EXPORT namespace winrt::Windows::Foundation
{
    struct Deferral;
    struct EventRegistrationToken;
    struct HResult;
    template <typename TSender, typename TResult> struct WINRT_IMPL_EMPTY_BASES TypedEventHandler;
    struct Uri;
}
WINRT_EXPORT namespace winrt::Windows::UI
{
    struct WindowId;
}
WINRT_EXPORT namespace winrt::Windows::UI::Shell::CompanionWindows
{
    enum class CompanionWindowRequestResultStatus : int32_t
    {
        Success = 0,
        UnknownFailure = 1,
        RegistrationNotFound = 2,
        ActivationTimedOut = 3,
        RejectedByCompanionApp = 4,
    };
    struct ICompanionWindowCoordinator;
    struct ICompanionWindowCoordinatorStatics;
    struct ICompanionWindowRequest;
    struct ICompanionWindowRequestResult;
    struct ICompanionWindowRequestStatics;
    struct CompanionWindowCoordinator;
    struct CompanionWindowRequest;
    struct CompanionWindowRequestResult;
    struct CompanionWindowsContract;
}
namespace winrt::impl
{
    template <> struct category<winrt::Windows::UI::Shell::CompanionWindows::ICompanionWindowCoordinator>{ using type = interface_category; };
    template <> struct category<winrt::Windows::UI::Shell::CompanionWindows::ICompanionWindowCoordinatorStatics>{ using type = interface_category; };
    template <> struct category<winrt::Windows::UI::Shell::CompanionWindows::ICompanionWindowRequest>{ using type = interface_category; };
    template <> struct category<winrt::Windows::UI::Shell::CompanionWindows::ICompanionWindowRequestResult>{ using type = interface_category; };
    template <> struct category<winrt::Windows::UI::Shell::CompanionWindows::ICompanionWindowRequestStatics>{ using type = interface_category; };
    template <> struct category<winrt::Windows::UI::Shell::CompanionWindows::CompanionWindowCoordinator>{ using type = class_category; };
    template <> struct category<winrt::Windows::UI::Shell::CompanionWindows::CompanionWindowRequest>{ using type = class_category; };
    template <> struct category<winrt::Windows::UI::Shell::CompanionWindows::CompanionWindowRequestResult>{ using type = class_category; };
    template <> struct category<winrt::Windows::UI::Shell::CompanionWindows::CompanionWindowRequestResultStatus>{ using type = enum_category; };
    template <> inline constexpr auto& name_v<winrt::Windows::UI::Shell::CompanionWindows::CompanionWindowCoordinator> = L"Windows.UI.Shell.CompanionWindows.CompanionWindowCoordinator";
    template <> inline constexpr auto& name_v<winrt::Windows::UI::Shell::CompanionWindows::CompanionWindowRequest> = L"Windows.UI.Shell.CompanionWindows.CompanionWindowRequest";
    template <> inline constexpr auto& name_v<winrt::Windows::UI::Shell::CompanionWindows::CompanionWindowRequestResult> = L"Windows.UI.Shell.CompanionWindows.CompanionWindowRequestResult";
    template <> inline constexpr auto& name_v<winrt::Windows::UI::Shell::CompanionWindows::CompanionWindowRequestResultStatus> = L"Windows.UI.Shell.CompanionWindows.CompanionWindowRequestResultStatus";
    template <> inline constexpr auto& name_v<winrt::Windows::UI::Shell::CompanionWindows::ICompanionWindowCoordinator> = L"Windows.UI.Shell.CompanionWindows.ICompanionWindowCoordinator";
    template <> inline constexpr auto& name_v<winrt::Windows::UI::Shell::CompanionWindows::ICompanionWindowCoordinatorStatics> = L"Windows.UI.Shell.CompanionWindows.ICompanionWindowCoordinatorStatics";
    template <> inline constexpr auto& name_v<winrt::Windows::UI::Shell::CompanionWindows::ICompanionWindowRequest> = L"Windows.UI.Shell.CompanionWindows.ICompanionWindowRequest";
    template <> inline constexpr auto& name_v<winrt::Windows::UI::Shell::CompanionWindows::ICompanionWindowRequestResult> = L"Windows.UI.Shell.CompanionWindows.ICompanionWindowRequestResult";
    template <> inline constexpr auto& name_v<winrt::Windows::UI::Shell::CompanionWindows::ICompanionWindowRequestStatics> = L"Windows.UI.Shell.CompanionWindows.ICompanionWindowRequestStatics";
    template <> inline constexpr auto& name_v<winrt::Windows::UI::Shell::CompanionWindows::CompanionWindowsContract> = L"Windows.UI.Shell.CompanionWindows.CompanionWindowsContract";
    template <> inline constexpr guid guid_v<winrt::Windows::UI::Shell::CompanionWindows::ICompanionWindowCoordinator>{ 0x05620E87,0xB0F7,0x59BA,{ 0xB3,0xA5,0xD6,0x14,0xBD,0xC1,0xEB,0xE3 } }; // 05620E87-B0F7-59BA-B3A5-D614BDC1EBE3
    template <> inline constexpr guid guid_v<winrt::Windows::UI::Shell::CompanionWindows::ICompanionWindowCoordinatorStatics>{ 0x964022FA,0x380E,0x518C,{ 0xBF,0xC8,0x0F,0x3B,0x84,0xFA,0xFE,0xA3 } }; // 964022FA-380E-518C-BFC8-0F3B84FAFEA3
    template <> inline constexpr guid guid_v<winrt::Windows::UI::Shell::CompanionWindows::ICompanionWindowRequest>{ 0xD92C351A,0x2D66,0x59A8,{ 0xB3,0x45,0x78,0x48,0x95,0x62,0xC4,0xD8 } }; // D92C351A-2D66-59A8-B345-78489562C4D8
    template <> inline constexpr guid guid_v<winrt::Windows::UI::Shell::CompanionWindows::ICompanionWindowRequestResult>{ 0xD728D2EF,0xE6D4,0x5CC0,{ 0x9F,0xF4,0x20,0xC1,0x7A,0x2C,0xE7,0x2D } }; // D728D2EF-E6D4-5CC0-9FF4-20C17A2CE72D
    template <> inline constexpr guid guid_v<winrt::Windows::UI::Shell::CompanionWindows::ICompanionWindowRequestStatics>{ 0x585E4544,0xD474,0x506A,{ 0x96,0xC2,0x35,0x97,0xA4,0x48,0x82,0xDA } }; // 585E4544-D474-506A-96C2-3597A44882DA
    template <> struct default_interface<winrt::Windows::UI::Shell::CompanionWindows::CompanionWindowCoordinator>{ using type = winrt::Windows::UI::Shell::CompanionWindows::ICompanionWindowCoordinator; };
    template <> struct default_interface<winrt::Windows::UI::Shell::CompanionWindows::CompanionWindowRequest>{ using type = winrt::Windows::UI::Shell::CompanionWindows::ICompanionWindowRequest; };
    template <> struct default_interface<winrt::Windows::UI::Shell::CompanionWindows::CompanionWindowRequestResult>{ using type = winrt::Windows::UI::Shell::CompanionWindows::ICompanionWindowRequestResult; };
    template <> struct abi<winrt::Windows::UI::Shell::CompanionWindows::ICompanionWindowCoordinator>
    {
        struct WINRT_IMPL_NOVTABLE type : inspectable_abi
        {
            virtual int32_t __stdcall RequestWindowFromAppAsync(void*, void**) noexcept = 0;
            virtual int32_t __stdcall DetachCompanionWindow() noexcept = 0;
            virtual int32_t __stdcall get_CompanionWindowId(struct struct_Windows_UI_WindowId*) noexcept = 0;
            virtual int32_t __stdcall add_Changed(void*, winrt::event_token*) noexcept = 0;
            virtual int32_t __stdcall remove_Changed(winrt::event_token) noexcept = 0;
        };
    };
    template <> struct abi<winrt::Windows::UI::Shell::CompanionWindows::ICompanionWindowCoordinatorStatics>
    {
        struct WINRT_IMPL_NOVTABLE type : inspectable_abi
        {
            virtual int32_t __stdcall GetForWindow(struct struct_Windows_UI_WindowId, void**) noexcept = 0;
        };
    };
    template <> struct abi<winrt::Windows::UI::Shell::CompanionWindows::ICompanionWindowRequest>
    {
        struct WINRT_IMPL_NOVTABLE type : inspectable_abi
        {
            virtual int32_t __stdcall Accept(struct struct_Windows_UI_WindowId, void**) noexcept = 0;
            virtual int32_t __stdcall Reject() noexcept = 0;
            virtual int32_t __stdcall GetDeferral(void**) noexcept = 0;
            virtual int32_t __stdcall get_RequestingWindowId(struct struct_Windows_UI_WindowId*) noexcept = 0;
        };
    };
    template <> struct abi<winrt::Windows::UI::Shell::CompanionWindows::ICompanionWindowRequestResult>
    {
        struct WINRT_IMPL_NOVTABLE type : inspectable_abi
        {
            virtual int32_t __stdcall get_Succeeded(bool*) noexcept = 0;
            virtual int32_t __stdcall get_Status(int32_t*) noexcept = 0;
            virtual int32_t __stdcall get_ExtendedError(winrt::hresult*) noexcept = 0;
            virtual int32_t __stdcall get_CompanionWindowId(struct struct_Windows_UI_WindowId*) noexcept = 0;
        };
    };
    template <> struct abi<winrt::Windows::UI::Shell::CompanionWindows::ICompanionWindowRequestStatics>
    {
        struct WINRT_IMPL_NOVTABLE type : inspectable_abi
        {
            virtual int32_t __stdcall GetFromLaunchUri(void*, void**) noexcept = 0;
        };
    };
    template <typename D>
    struct consume_Windows_UI_Shell_CompanionWindows_ICompanionWindowCoordinator
    {
        auto RequestWindowFromAppAsync(param::hstring const& appId) const;
        auto DetachCompanionWindow() const;
        [[nodiscard]] auto CompanionWindowId() const;
        auto Changed(winrt::Windows::Foundation::TypedEventHandler<winrt::Windows::UI::Shell::CompanionWindows::CompanionWindowCoordinator, winrt::Windows::Foundation::IInspectable> const& handler) const;
        using Changed_revoker = impl::event_revoker<winrt::Windows::UI::Shell::CompanionWindows::ICompanionWindowCoordinator, &impl::abi_t<winrt::Windows::UI::Shell::CompanionWindows::ICompanionWindowCoordinator>::remove_Changed>;
        [[nodiscard]] auto Changed(auto_revoke_t, winrt::Windows::Foundation::TypedEventHandler<winrt::Windows::UI::Shell::CompanionWindows::CompanionWindowCoordinator, winrt::Windows::Foundation::IInspectable> const& handler) const;
        auto Changed(winrt::event_token const& token) const noexcept;
    };
    template <> struct consume<winrt::Windows::UI::Shell::CompanionWindows::ICompanionWindowCoordinator>
    {
        template <typename D> using type = consume_Windows_UI_Shell_CompanionWindows_ICompanionWindowCoordinator<D>;
    };
    template <typename D>
    struct consume_Windows_UI_Shell_CompanionWindows_ICompanionWindowCoordinatorStatics
    {
        auto GetForWindow(winrt::Windows::UI::WindowId const& windowId) const;
    };
    template <> struct consume<winrt::Windows::UI::Shell::CompanionWindows::ICompanionWindowCoordinatorStatics>
    {
        template <typename D> using type = consume_Windows_UI_Shell_CompanionWindows_ICompanionWindowCoordinatorStatics<D>;
    };
    template <typename D>
    struct consume_Windows_UI_Shell_CompanionWindows_ICompanionWindowRequest
    {
        auto Accept(winrt::Windows::UI::WindowId const& windowId) const;
        auto Reject() const;
        auto GetDeferral() const;
        [[nodiscard]] auto RequestingWindowId() const;
    };
    template <> struct consume<winrt::Windows::UI::Shell::CompanionWindows::ICompanionWindowRequest>
    {
        template <typename D> using type = consume_Windows_UI_Shell_CompanionWindows_ICompanionWindowRequest<D>;
    };
    template <typename D>
    struct consume_Windows_UI_Shell_CompanionWindows_ICompanionWindowRequestResult
    {
        [[nodiscard]] auto Succeeded() const;
        [[nodiscard]] auto Status() const;
        [[nodiscard]] auto ExtendedError() const;
        [[nodiscard]] auto CompanionWindowId() const;
    };
    template <> struct consume<winrt::Windows::UI::Shell::CompanionWindows::ICompanionWindowRequestResult>
    {
        template <typename D> using type = consume_Windows_UI_Shell_CompanionWindows_ICompanionWindowRequestResult<D>;
    };
    template <typename D>
    struct consume_Windows_UI_Shell_CompanionWindows_ICompanionWindowRequestStatics
    {
        auto GetFromLaunchUri(winrt::Windows::Foundation::Uri const& launchUri) const;
    };
    template <> struct consume<winrt::Windows::UI::Shell::CompanionWindows::ICompanionWindowRequestStatics>
    {
        template <typename D> using type = consume_Windows_UI_Shell_CompanionWindows_ICompanionWindowRequestStatics<D>;
    };
}
#endif
