<Project Sdk="Microsoft.NET.Sdk">

  <ItemGroup>
    <ProjectReference Include="..\VoiceCat.Interop\VoiceCat.Interop.csproj" />
  </ItemGroup>

  <!-- Prismatoid — .NET bindings for the Prism speech library, used for spoken event
       announcements (text-to-speech). net10.0, no transitive dependencies. -->
  <ItemGroup>
    <PackageReference Include="Prismatoid" Version="0.3.0" />
  </ItemGroup>

  <!-- Event-cue WAVs (shared with the macOS/iOS clients) copied into sounds\ next to the exe;
       SoundPlayerPool loads them from AppContext.BaseDirectory\sounds. -->
  <ItemGroup>
    <Content Include="..\..\..\assets\sounds\*.wav">
      <Link>sounds\%(Filename)%(Extension)</Link>
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
  </ItemGroup>

  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net10.0-windows</TargetFramework>
    <Nullable>enable</Nullable>
    <UseWindowsForms>true</UseWindowsForms>
    <ImplicitUsings>enable</ImplicitUsings>
    <ApplicationManifest>app.manifest</ApplicationManifest>
    <AssemblyName>VoiceCat.App</AssemblyName>
    <RootNamespace>VoiceCat.App</RootNamespace>
    <!-- Per-monitor v2 DPI awareness (correct scaling on multi-monitor/high-DPI — matters for
         low-vision users as much as general UX). Set via this property, not app.manifest —
         WinForms' own analyzer (WFO0003) flags manifest-based DPI settings as superseded by
         this property in modern .NET. -->
    <ApplicationHighDpiMode>PerMonitorV2</ApplicationHighDpiMode>
    <!-- WASAPI process-loopback COM interop in Audio/ProcessLoopbackCapture.cs uses unsafe
         pointer arithmetic for PROPVARIANT/AUDIOCLIENT_ACTIVATION_PARAMS marshaling. -->
    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
  </PropertyGroup>

  <!-- System.Security.Cryptography.ProtectedData (PasswordProtector.cs's DPAPI wrapper) ships
       as part of the Windows Desktop shared framework on net10.0-windows — no PackageReference
       needed (one was tried and NuGet flagged it as redundant/unprunable, NU1510). -->

  <!-- voicecat.dll must exist (build the `windows-client` CMake preset first — see
       clients/windows/README.md). -->
  <ItemGroup>
    <Content Include="$(VoiceCatNativeDir)\voicecat.dll" Condition="Exists('$(VoiceCatNativeDir)\voicecat.dll')">
      <Link>voicecat.dll</Link>
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
  </ItemGroup>

  <Target Name="VoiceCatCheckNativeDll" BeforeTargets="Build">
    <Error Condition="!Exists('$(VoiceCatNativeDir)\voicecat.dll')"
           Text="voicecat.dll not found at '$(VoiceCatNativeDir)'. Build it first: cmake --preset windows-client &amp;&amp; cmake --build --preset windows-client (see clients/windows/README.md)." />
  </Target>

</Project>