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

  <PropertyGroup>
    <!-- Multi-targeted: net48 for the Console, net8.0-windows for the Launcher Service. -->
    <TargetFrameworks>net48;net8.0-windows</TargetFrameworks>

    <!-- CRITICAL: the output assembly MUST be named TeslaConsoleLaunchLib at
         version 1.0.0.0. BinaryFormatter embeds the assembly name in the wire
         stream and the Console resolves the wire types by that simple name, so
         renaming the assembly would change the protocol. This is a pure
         refactor that keeps the bytes identical. -->
    <AssemblyName>TeslaConsoleLaunchLib</AssemblyName>
    <RootNamespace>Tesla.Net</RootNamespace>
    <AssemblyVersion>1.0.0.0</AssemblyVersion>
    <FileVersion>1.0.0.0</FileVersion>
    <Version>1.0.0.0</Version>

    <Nullable>disable</Nullable>
    <ImplicitUsings>disable</ImplicitUsings>
    <LangVersion>latest</LangVersion>
    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
    <!-- Decompiled-style source: designer-ish fields, BinaryFormatter on net6. -->
    <NoWarn>$(NoWarn);SYSLIB0011</NoWarn>
  </PropertyGroup>

  <!-- net48 reference assemblies so the project builds without a full targeting pack,
       plus System.Text.Json (built into the net8 shared framework, a package on net48). -->
  <ItemGroup Condition="'$(TargetFramework)' == 'net48'">
    <PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.3" PrivateAssets="all" />
    <PackageReference Include="System.Text.Json" Version="8.0.5" />
  </ItemGroup>

  <!-- The TCP/OFB client (Client/**) is net48-only: it depends on the crypto-stream
       handshake in TeslaSecureConfiguration.dll. The Launcher (net6) is the SERVER
       end of this protocol and never references these classes, so they are excluded
       from the net6.0-windows build (which carries only the wire data types). -->
  <ItemGroup Condition="'$(TargetFramework)' != 'net48'">
    <Compile Remove="Client\**\*.cs" />
  </ItemGroup>

  <ItemGroup Condition="'$(TargetFramework)' == 'net48'">
    <!-- Source-built secure-config (PodConfigurationServer.NegotiateCryptoStreams),
         emitting assembly TeslaSecureConfiguration. net48-only, same as Client/**. -->
    <ProjectReference Include="..\SecureConfig\Tesla.SecureConfig.csproj" />
  </ItemGroup>

</Project>
